Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 构建命名列表而不必键入每个对象';她叫了两次名字_R_List - Fatal编程技术网

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——如果可以的话,我会接受你的回答。