问题 R变量使用变量名列表[重复]


这个问题在这里已有答案:


11371
2017-07-24 10:11


起源

+1对于可重复的示例。我不认为这是特别的 坏 自己做的方式。但你可以避免 sapply 呼叫。 - Simon O'Hanlon


答案:


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

14
2017-07-24 10:19



+1!我会 as.list(match.call())[-1]。和 expand.dots = TRUE 默认设置 - agstudy
@ agstudy谢谢,我注意到了你的提示 expand.dots! - Simon O'Hanlon
这不允许您在通话中命名,例如 r named.list(a, b, c = 1:4) 不会命名c。你可以设置 l <- list(...) 然后将match.call中的名称添加到没有名称的元素中,以保留调用中命名的变量的名称。 - Wart


如果你已经使用了tidyverse软件包,那么你可能会对使用它感兴趣 tibble::lst 这样做的功能

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

1
2018-03-13 15:46