[R] problem with lapply(x, subset, ...) and variable select argument

Thomas Lumley tlumley at u.washington.edu
Mon Oct 10 19:22:37 CEST 2005


On Mon, 10 Oct 2005, joerg van den hoff wrote:

> I need to extract identically named columns from several data frames in
> a list. the column name is a variable (i.e. not known in advance). the
> whole thing occurs within a function body. I'd like to use lapply with a
> variable 'select' argument.

You would probably be better off using "[" rather than subset().

tt <- function (n) {
     x <- list(data.frame(a=1,b=2), data.frame(a=3,b=4))
     print(lapply(x,"[",n))
}

seems to do what you want.

 	-thomas

> example:
>
> tt <- function (n) {
>    x <- list(data.frame(a=1,b=2), data.frame(a=3,b=4))
>    for (xx in x) print(subset(xx, select = n))   ### works
>    print (lapply(x, subset, select = a))   ### works
>    print (lapply(x, subset, select = "a"))  ### works
>    print (lapply(x, subset, select = n))  ### does not work as intended
> }
> n = "b"
> tt("a")  #works (but selects not the intended column)
> rm(n)
> tt("a")   #no longer works in the lapply call including variable 'n'
>
>
> question: how  can I enforce evaluation of the variable n such that
> the lapply call works? I suspect it has something to do with eval and
> specifying the correct evaluation frame, but how? ....
>
>
> many thanks
>
> joerg
>
> ______________________________________________
> 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
>

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




More information about the R-help mailing list