R 构建命名列表而不必键入每个对象';她叫了两次名字
在交互式使用中,我偶尔需要捆绑一组较大的 对象合并到一个列表中。获取元素保留在其中的列表 他们原来的名字,我被迫写了一些类似的东西R 构建命名列表而不必键入每个对象';她叫了两次名字,r,list,R,List,在交互式使用中,我偶尔需要捆绑一组较大的 对象合并到一个列表中。获取元素保留在其中的列表 他们原来的名字,我被迫写了一些类似的东西 列表(Object1=Object1,Object2=Object2,…,Object25=Object25) 是否有一些简单的方法可以将一组命名对象放在列表中,这样它们就可以“保留”它们的名称,而不必为每个对象键入nameXXX=nameXXX cars <- mtcars[1:2,1:2] vowels <- c("a","e","i","o","u
列表(Object1=Object1,Object2=Object2,…,Object25=Object25)
是否有一些简单的方法可以将一组命名对象放在列表中,这样它们就可以“保留”它们的名称,而不必为每个对象键入nameXXX=nameXXX
cars <- mtcars[1:2,1:2]
vowels <- c("a","e","i","o","u")
consonants <- setdiff(letters, vowels)
## I'd like to get this result...
list(consonants=consonants, vowels=vowels, cars=cars)
## $consonants
## [1] "b" "c" "d" "f" "g" "h" "j" "k" "l" "m" "n" "p" "q" "r" "s" "t" "v" "w" "x"
## [20] "y" "z"
##
## $vowels
## [1] "a" "e" "i" "o" "u"
##
## $cars
## mpg cyl
## Mazda RX4 21 6
## Mazda RX4 Wag 21 6
## ... but by doing something more like
f(consonants, vowels, cars)
汽车以下是我最近使用的
不过,如果有更简洁的东西(或者base R内置的东西或者一个像样的包),那就太好了,所以请随意添加其他/更好的答案
LIST <- function(...) {
nms <- sapply(as.list(substitute(list(...))), deparse)[-1]
setNames(list(...), nms)
}
LIST(vowels, consonants, cars)
# $vowels
# [1] "a" "e" "i" "o" "u"
#
# $consonants
# [1] "b" "c" "d" "f" "g" "h" "j" "k" "l" "m" "n" "p" "q" "r" "s" "t" "v" "w" "x"
# [20] "y" "z"
#
# $cars
# mpg cyl
# Mazda RX4 21 6
# Mazda RX4 Wag 21 6
LIST您可以使用
mget(c("vowels", "consonants", "cars"))
但你必须引用变量名,而变量名并不特别性感。那么:
namedList <- function(...){
out <- list(...)
for(i in seq(length(out)))
names(out)[i] <- as.character(sys.call()[[i+1]])
out
}
foo = 1
bar = 'Hello world'
namedList(foo,bar)
#> $foo
#> [1] 1
#>
#> $bar
#> [1] "Hello world"
namedList
#>$bar
#>[1]“你好,世界”
此修改允许不带引号的名称:mget(sappy(表达式(元音、辅音、cars)、粘贴))
有趣。我有点惊讶paste
这样工作。我本以为会有一个deparse
。谢谢,@BenBolker——如果可以的话,我会接受你的回答。