On 16-05-2013, at 17:31, "Patel, Shreena" <s.pate...@lancaster.ac.uk> wrote:

> Dear R User,
> 
> I'm trying to perform a grid-search for the ML estimator of the Box-Cox 
> parameter for a linear mixed model. However using sapply to perform the grid 
> search returns an error message. Here's a small example to demonstrate:
> 
> library(lme4)
> 
> # Function to fit model for a given lambda:
> bc.fit <- function(lam,X,Z,Y){
>               ybar <- exp(mean(log(Y)))
>               if(lam==0){
>                              w <- ybar*log(Y)
>               } else {
>                              w <- (Y^lam-1)/(lam*ybar^(lam-1))
> }
> bc.mod <- lmer(w~X+(1|Z))
> as.numeric(logLik(bc.mod))
> }
> 
> # Simulate data
> x <- runif(1000)
> z <- sample(1:100,1000,T)
> b <- rnorm(100)[z]
> y <- rnorm(1000,20+0.5*x+b,2)
> 
> # Perform search
> lambda <- 1:10/10
> sapply(lambda,bc.fit,X=x,Z=z,Y=y)
> 
> Produces the error:
> Error in get(as.character(FUN), mode = "function", envir = envir) :
>  object 'lambda' of mode 'function' was not found
> 
> However a single run works fine - bc.fit(lambda[1],x,z,y)
> 
> Other people appear to have had similar errors, caused by naming variables 
> after existing functions, however I don't think that's the problem here. Any 
> advice would be appreciated, thank you!

It is the problem.
The first argument of sapply is X. Your function bc.fit has an argument X which 
you explicitly set to x.
So sapply takes lambda as the second argument which is FUN (function).

So rename your bc.fit arguments to something else: e.g. (x,y,z) or (X1,Y1,Z1).

And reread the documentation of sapply. It's all there.

Berend

______________________________________________
R-help@r-project.org 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.

Reply via email to