16

I've looked extensively for a solution for this very simple task and though I have a solution, it seems like there must be a better way. The task is to create a list from a set of variables, using the variable names as names for each element in the list, e.g.:

a <- 2
b <- 'foo'
c <- 1:4

My current solution:

named.list <- function(...) { 
    l <- list(...)
    names(l) <- sapply(substitute(list(...)), deparse)[-1]
    l 
}
named.list(a,b,c)

Produces:

$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4
4

2 に答える 2

17

私が考えることができるいくつかの方法が含まれますmget(オブジェクトが配置されている環境について仮定します):

mget( c("a","b","c") )
$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4

match.callまたは、関数の編集として、次のように使用できます。

named.list <- function(...) { 
    l <- list(...)
    names(l) <- as.character( match.call()[-1] )
   l
}
named.list( a,b,c)
$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4

setNamesまたは、次のように使用して一度に実行できます。

named.list <- function(...) { 
    l <- setNames( list(...) , as.character( match.call()[-1]) ) 
    l
}

named.list( a,b,c)
$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4
于 2013-07-24T10:19:21.420 に答える