【问题标题】:Constructing a named list without having to type each object's name twice [duplicate]构造一个命名列表而不必输入每个对象的名称两次[重复]
【发布时间】:2015-06-10 19:25:09
【问题描述】:

在交互使用中,我偶尔需要捆绑较大的一组 对象一起放在一个列表中。获取元素保留的列表 他们原来的名字,我不得不写类似 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)

【问题讨论】:

  • 谢谢,@BenBolker -- 如果可以的话,我会接受你的回答。

标签: r list


【解决方案1】:

你可以得到相同的结构

mget(c("vowels", "consonants", "cars"))

但你确实必须引用不是超级性感的变量名。

【讨论】:

  • 此修改允许不带引号的名称:mget(sapply(expression(vowels, consonants, cars), paste))
  • 有趣。我有点惊讶paste 会这样工作。我本来希望deparse
【解决方案2】:

这是我最近使用的。

不过,如果有更简洁的东西(或者内置在基本 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

【讨论】:

    【解决方案3】:

    怎么样:

    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"
    

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多