R使用变量名称列出变量

时间:2013-07-24 10:11:57

标签: r

我已经广泛寻找这个非常简单的任务的解决方案,虽然我有一个解决方案,但似乎必须有更好的方法。任务是从一组变量创建一个列表,使用变量名作为列表中每个元素的名称,例如:

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

我目前的解决方案:

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

产地:

$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4

2 个答案:

答案 0 :(得分:15)

我能想到的几种方法包括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

答案 1 :(得分:1)

如果您已经使用了tidyverse软件包,那么您可能有兴趣使用执行此操作的tibble::lst函数

tibble::lst(a, b, c)
# $a
#  [1] 2
#  
# $b
# [1] "foo"
# 
# $c
# [1] 1 2 3 4