Supply your additional arguments to optim() and they will get passed to your function:
> mydat<-data.frame(d1=c(3,5),d2=c(6,10),p1=c(.55,.05),p2=c(.85,.35)) > > fr<-function(x, d) { + # d is a vector of d1, d2, p1 & p2 + u <- x[1] + v <- x[2] + d1 <- d[1] + d2 <- d[2] + p1 <- d[3] + p2 <- d[4] + sqrt(sum((plnorm(c(d1,d2,u,v)-c(p1,p2))^2))) + } > x0 <- c(1,1) # starting values for two unknown parameters > y1 <- optim(x0,fr,d=unlist(mydat[1,])) > y2 <- optim(x0,fr,d=unlist(mydat[2,])) > y1$par [1] 0.462500 0.828125 > y2$par [1] -1.0937500 0.2828125 > yall <- apply(mydat, 1, function(d) optim(x0,fr,d=d)) > yall[[1]]$par [1] 0.462500 0.828125 > yall[[2]]$par [1] -1.0937500 0.2828125 > One thing you must be careful of is that none of the arguments to your function match or partially match the named arguments of optim(), which are: > names(formals(optim)) [1] "par" "fn" "gr" "method" "lower" "upper" "control" [8] "hessian" "..." > For example, if your function has an argument 'he=', you will not be able to pass it, because if you say optim(x0, fr, he=3), the 'he' will match the 'hessian=' argument of optim(), and it will not be interpreted as being a '...' argument. -- Tony Plate Michael Papenfus wrote: > I think I need to clarify a little further on my original question. > > I have the following two rows of data: > mydat<-data.frame(d1=c(3,5),d2=c(6,10),p1=c(.55,.05),p2=c(.85,.35)) > >mydat > d1 d2 p1 p2 > 1 3 6 0.55 0.85 > 2 5 10 0.05 0.35 > > I need to optimize the following function using optim for each row in mydat > fr<-function(x) { > u<-x[1] > v<-x[2] > sqrt(sum((plnorm(c(d1,d2,u,v)-c(p1,p2))^2)) > } > x0<-c(1,1) # starting values for two unknown parameters > y<-optim(x0,fr) > > In my defined function fr, (d1 d2 p1 p2) are known values which I need > to read in from my dataframe and u & v are the TWO unknown parameters. > I want to solve this equation for each row of my dataframe. > > I can get this to work when I manually plug in the known values (d1 d2 > p1 p2). However, I would like to apply this to each row in my dataframe > where the known values are automatically passed to my function which > then is sent to optim which solves for the two unknown parameters for > each row in the dataframe. > > thanks again, > mike > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.