在交互式使用中,我偶尔需要将一组较大的对象捆绑在一个列表中.为了得到一个列表,其中元素保留其原始名称,我被迫写出类似的东西
list(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)
Run Code Online (Sandbox Code Playgroud)
MrF*_*ick 18
你可以得到相同的结构
mget(c("vowels", "consonants", "cars"))
Run Code Online (Sandbox Code Playgroud)
但你必须要引用不是超级性感的变量名称.
Jos*_*ien 11
这是我最近使用的.
不过,如果有更简洁的东西(或基础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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |