[R] get() in sapply() in with()

Thomas Lumley tlumley at u.washington.edu
Thu Aug 3 16:33:47 CEST 2006


On Thu, 3 Aug 2006, Heinz Tuechler wrote:

> Dear All,
>
> applying some function within a with() function I wanted to use also
> sapply() and get() to form a data.frame, but did not succede.
> Below is a simplified example.
> It is possible to use sapply() within a with() function, it is also
> possible to use get() within a with() function, but when I try to use get
> within sapply within with I arrive at "Error in get(x, envir, mode,
> inherits) : variable "v5" was not found".
> Is there a solution?

This isn't what you want to hear, but the solution is probably to not use 
get(). How to not use get() will depend on what your problem really is.

>
> ## example
> df1 <- data.frame(v5=16:20, v6=21:25, v7=I(letters[16:20]), v8=letters[16:20])
>
> with(df1, sapply(c('v5', 'v6'), get) ) ## Error, see next line
> ## Error in get(x, envir, mode, inherits) : variable "v5" was not found

get() looks in the environment it was called from, which is the 
environment inside lapply(), whose parent is the environment of 
the base package. There is no "v5" there.

> with(df1, sapply(list(v5, v6), mean) ) # does work

This works because list(v5,v6) is evaluated in df1.

> with(df1, get('v5') ) # does work

This works because get() looks in the environment it was called from, 
which is df1.


 	-thomas

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle



More information about the R-help mailing list