[R] subsetting within a function
Pamela McCaskie
pmccask at cyllene.uwa.edu.au
Mon Jan 3 04:54:49 CET 2005
Thankyou for your help with subsetting within a function. I have now tried
to apply the same theory in the framework of an lme as follows:
fit1.lme <- eval(substitute(lme(fixed=fixed, data=dataframe,
random=random, correlation=corCAR1(form= corr), na.action=na.omit,
subset=subset),list(subset=subs)))
but I get the following error:
Error in switch(mode(object), name = , numeric = , call = object,
character = as.name(object), :
[[ cannot be of mode logical
I'm not sure why. Can anyone help me with this?
kind regards
Pam
On Thu, 30 Dec 2004, Thomas Lumley wrote:
> On Thu, 30 Dec 2004, Pamela McCaskie wrote:
> > And so my attempt to wrap a simple function around this looks like:
> > test.fun <- function(formula, mydata, sub=NULL){
> > subs <- with(mydata, eval(sub))
> > fit.glm <- glm(formula=formula, data=mydata, family=binomial, subset=subs)
> > return(fit.glm)
> > }
> >
> > But when I tested it out with
> > test <- test.fun(y~x1+x2, mydata=testdata, sub=expression(SEX==0))
> >
> > I get:
> > Error in "[.data.frame"(structure(list(N_ASTHMA = as.integer(c(0, 0, 0, :
> > invalid subscript type
>
> I get a different error: it may be that you have an object called `subs`
> in the global environment
>
> > I'm guessing that it's looking in the global environment for
> > subs,
>
> More precisely, it is looking in environment where `formula` was created,
> which happens to be the global environment.
>
> This is the sort of thing that happens with the fitting functions because
> they go to such lengths to break the basic scoping of R.
>
>
> You probably have to substitute() the evaluated subset into the glm call.
>
> fit.glm <- eval(substitute(glm(formula=formula, data=mydata,
> family=binomial, subset=subset),list(subset=subs)))
>
>
> -thomas
>
More information about the R-help
mailing list