On Jul 23, 2009, at 9:19 AM, roger koenker wrote:

This is an attempt to rescue an old R-help question that apparently received no response from the oblivion of collective silence, and besides I'm also
curious about the answer

From: Griffith Feeney (gfee...@hawaii.edu)
Date: Fri 28 Jan 2000 - 07:48:45 EST   wrote (to R-help)
Constructing lists with

list(name1=name1, name2=name2, ...)

is tedious when there are many objects and names are long. Is there an R function that takes a character vector of object names as an argument and
returns a list with each objected tagged by its name?

The idiom

        lapply(ls(pat = "^name"), function(x) eval(as.name(x)))

makes the list, but (ironically) doesn't assign the names to the components.

Roger,

How about something like this:

name1 <- 1:3
name2 <- 1:5
name3 <- 1:9
name4 <- 1:7


> ls(pat = "^name")
[1] "name1" "name2" "name3" "name4"


> sapply(ls(pat = "^name"), get, simplify = FALSE)
$name1
[1] 1 2 3

$name2
[1] 1 2 3 4 5

$name3
[1] 1 2 3 4 5 6 7 8 9

$name4
[1] 1 2 3 4 5 6 7


Is that what you are after? With sapply(), you can take advantage of the USE.NAMES argument, which defaults to TRUE and then set simplify to FALSE to force the result to be a list rather than a matrix. Of course, in the case I have above, when there are uneven length elements, the result will be a list anyway.

HTH,

Marc Schwartz

______________________________________________
R-help@r-project.org 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.

Reply via email to