In addition the error message explicitly says: Error in optim(0.3, opt1, method = "BFGS") : objective function in optim evaluates to length 18 not 1
And from the objective function we see opt1 <- function (x) { Z <- x + M c.hat <- (x/Z)*pop*(1-exp(-Z)) y <- (catch - c.hat)^2 return(y) } The last line should be replaced by: sum(y) rather than "return(y)". See ?optim, ?apply, and the reference Bert gives below. HTH, --sundar Berton Gunter wrote: > You are not calling apply() properly. Please read relevant reference > material carefully. You might also wish to pick up one of the several good > books on R (check CRAN website) -- I like V&R's S PROGRAMMING. > > I did not go through your example in detail, but your apply() call should be > of the form > > apply(d,2,function(x)optim(x,...)) > > You may or may not get into scoping problems with the opt1 argument and have > to pass it in explicitly -- I can't remember how things work with optim. > > -- Bert Gunter > Genentech Non-Clinical Statistics > South San Francisco, CA > > "The business of the statistician is to catalyze the scientific learning > process." - George E. P. Box > > > > >>-----Original Message----- >>From: [EMAIL PROTECTED] >>[mailto:[EMAIL PROTECTED] On Behalf Of >>Guenther, Cameron >>Sent: Friday, January 13, 2006 11:03 AM >>To: [EMAIL PROTECTED] >>Subject: [R] apply >> >>Hello, >>I have a dataset d which is >> >d >> pop catch >>1 66462.01 10807.757 >>2 87486.73 46257.885 >>3 57211.64 9345.058 >>4 71321.62 4892.868 >>5 100024.89 27334.248 >>6 104504.91 48535.092 >>7 95295.51 39348.195 >>8 93737.35 34343.489 >>9 89375.05 28750.743 >>10 95312.65 30755.064 >>11 100888.17 55404.370 >>12 84790.23 37751.074 >>13 81129.82 29277.443 >>14 69797.09 21500.398 >>15 61690.34 18199.664 >>16 60671.08 19349.051 >>17 62852.57 16300.982 >>18 90646.32 34793.148 >> >>And a function opt1: >> >>opt1 <- function (x) { >> Z <- x + M >> c.hat <- (x/Z)*pop*(1-exp(-Z)) >> y <- (catch - c.hat)^2 >> return(y) >> } >> >>And define M = 0.25 >>For each row I want to return a value F that is a minimization of the >>opt1 function >> >>I have tried many variations of: >>d$F<-apply(d,2,optim(0.3,opt1,method="BFGS") >>and even: >>For (I in 1:length(pop))apply(d,2,optim(0.3,opt1,method="BFGS")) >> >>Every time I get the same error message >> >>Error in optim(0.3, opt1, method = "BFGS") : >> objective function in optim evaluates to length 18 not 1 >> >>So the apply function is returning 18 values of F which I want but the >>function only wants to return 1 value. >> >>Any Suggestions. >>Thanks, >>Cam >> >>______________________________________________ >>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 >> > > > ______________________________________________ > 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 ______________________________________________ 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