[R] "eval" inside a function call in connection with updating the data slot in the call of lmer
David Winsemius
dwinsemius at comcast.net
Tue Sep 18 00:55:18 CEST 2012
On Sep 17, 2012, at 3:26 PM, Søren Højsgaard wrote:
> Dear list,
> Given a linear mixed model (from lme4) I want to 1) first change the input dataset and then 2) change the model formula. I want this to happen in a function call;
> Please see below. Options 1) and 2) below work whereas 3) fails with the message
>> foo()
> Error in is.data.frame(data) : object 'beets2' not found
>
> Question: What is it one must to in case 3) to have R look "inside" the function to figure out what "beets2" is?
That will depend on how you offer that 6 letter sequence to the interpreter. Surrounded by quotes will be quite different than without quotes
>
> Best regards
> Søren
> ________________
>
> library(pbkrtest)
> data(beets)
> lgs <- lmer(sugpct~block+sow+harvest+(1|block:harvest), data=beets, REML=F)
>
> foo <- function(){
> ## 1)
> beets2 <- transform(beets, yy = sugpct * yield)
> ma1 <- lmer(yy~block+sow+harvest+(1|block:harvest), data=beets2, REML=F)
> ma0 <- update(ma1, yy~.)
> ## 2)
> cl <- getCall(lgs)
> cl[["data"]] <- beets2
> mb1 <- eval(cl)
> mb0 <- update(mb1, yy~.)
> mb0
> ## 3)
> cl <- getCall(lgs)
> cl[["data"]] <- as.name("beets2")
The problem here is that 'beets2' is just a character vector ... with no binding.
I'm wondering if you instead want:
cl[["data"]] <- get("beets2")
> mc1 <- eval(cl)
> mc0 <- update(mc1, yy~.)
> mc0
> }
> foo()
No guarantees. I'm not a particularly experienced surgeon of lmer-objects.
>
--
David Winsemius, MD
Alameda, CA, USA
More information about the R-help
mailing list