从对象名称向量中列出许多对象

时间:2017-08-30 15:02:26

标签: r

TL; DR:我需要的是list()的矢量化版本。

我试图创建一个对象列表。我不知道那里会有多少物品或者它们会被叫什么,而且可能有很多物体。所以我不能手工制作清单。

但是,我知道当我需要制作列表时,所有对象都会存在于我的环境中,而且我知道我将拥有一个包含所有对象名称的字符向量。

(这是一个可怕的三层for循环的输出,我试图避免做任何更大的。我可以创建一个空列表,然后在循环创建它时为它分配对象,但我和#39; d不愿意。)

我搜索了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. 

2 个答案:

答案 0 :(得分:3)

您可以使用mget从环境中获取对象并将其放入列表中。

mget(VECTOR_OF_NAMES_OF_OBJECTS)

您还可以将mgetls()合并,这样您就不必为自己键入对象名称。

obj1 = 1:2
obj2 = 3:7
obj13 = 8:11

mget(ls(pattern = "obj\\d+"))
#$obj1
#[1] 1 2

#$obj13
#[1]  8  9 10 11

#$obj2
#[1] 3 4 5 6 7

答案 1 :(得分:0)

我找到了解决方案!

foo <- lapply(objectsVector, get) # This creates a list of the objects.
foo <- setnames(foo, namesVector) # This names the elements of the list. 

我离开了这个问题,因为我花了很长时间寻找答案,并希望给别人带来麻烦。我不确定这是否是批准的事情。