【发布时间】:2018-02-08 08:52:26
【问题描述】:
TL;DR:我需要的是list() 的矢量化版本。
我正在尝试创建一个对象列表。我不知道会有多少对象,也不知道它们会叫什么,而且可能有很多。所以我不能手工列出清单。
但是,我知道在创建列表时所有对象都将存在于我的环境中,并且我知道我将拥有一个包含所有对象名称的字符向量。
(这些是可怕的三层 for 循环的输出,我试图避免使其变得更大。我可以创建一个空列表,然后在循环创建对象时为其分配对象,但我会不喜欢。)
我搜索了 Google 和 Stack Overflow,但找不到好的解决方案。在我看来,我需要的是list() 的矢量化版本:它将采用对象名称的向量,找到所有这些对象并将它们推入列表中。
list(obj1, obj2, obj3) # Not this. I don't want to name each element individually.
objectsVector <- c("obj1", "obj2", "obj3")
list_vectorised(elements = objectsVector) # I want this instead.
namesVector <- c("anObject", "anotherObject", "yetAnotherObject")
list_vectorised(elements = objectsVector, names = namesVector) # Or better still, this.
【问题讨论】:
-
我相信现有的帖子很好地回答了您的问题:stackoverflow.com/questions/22235809/… 我通常发现 rep(NA,x) 策略非常适合我的需求。还有一些公开的方法可以将现有列表转换为向量(请参阅:stackoverflow.com/questions/4390862/convert-a-vector-to-a-list)看起来您需要使用 apply 函数,或者编写自己的效率可能较低的函数(使用 rep() 和 for 循环,我认为这是天真的方法)
-
谢谢!使用 mget 比 lapply-ing get 好得多。
-
在链接的帖子中查看我的答案。它使用
mget和ls中的模式参数来拉取名称与特定模式匹配的对象。链接的帖子询问了 data.frames,但所有答案都适用于任何类型的 R 对象。 -
谢谢,lmo。该模式没有多大帮助,因为我的对象实际上并不称为 obj1 等,而是具有可能与我不想获取的对象名称相似的动态名称。但是mget很好。
标签: r