[R] lapply not reading arguments from the correct environment

Gabor Grothendieck ggrothendieck at gmail.com
Fri May 18 18:21:54 CEST 2007


In particular, we can use "[" directly instead of subset.  This is the
same as your function except for the line marked ### :

myfun2 <- function() {
       foo = data.frame(1:10,10:1)
       foos = list(foo)
       fooCollumn=2
       cFoo = lapply(foos, "[", fooCollumn) ###
       return(cFoo)
}
myfun2() # test

On 5/18/07, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
> You need to study carefully what the semantics of 'subset' are.  The
> function body of myfun is not in the evaluation environment.  (The issue
> is 'subset', not 'lapply': select is an *expression* and not a value.)
>
> Hint: using subset() programmatically is almost always a mistake.  R's
> subsetting function is '[': subset is a convenience wrapper.
>
> On Fri, 18 May 2007, jiho wrote:
>
> > Hello,
> >
> > I am facing a problem with lapply which I ''''think''' may be a bug.
> > This is the most basic function in which I can reproduce it:
> >
> > myfun <- function()
> > {
> >       foo = data.frame(1:10,10:1)
> >       foos = list(foo)
> >       fooCollumn=2
> >       cFoo = lapply(foos,subset,select=fooCollumn)
> >       return(cFoo)
> > }
> >
> > I am building a list of dataframes, in each of which I want to keep
> > only column 2 (obviously I would not do it this way in real life but
> > that's just to demonstrate the bug).
> > If I execute the commands inline it works but if I clean my
> > environment, then define the function and then execute:
> >       > myfun()
> > I get this error:
> >       Error in eval(expr, envir, enclos) : object "fooCollumn" not found
> > while fooCollumn is defined, in the function, right before lapply. In
> > addition, if I define it outside the function and then execute the
> > function:
> >       > fooCollumn=1
> >       > myfun()
> > it works but uses the value defined in the general environment and
> > not the one defined in the function.
> > This is with R 2.5.0 on both OS X and Linux (Fedora Core 6)
> > What did I do wrong? Is this indeed a bug? An intended behavior?
>
> It is a bug, in your function.
>
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>
> ______________________________________________
> R-help at 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.
>



More information about the R-help mailing list