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.
答案 0 :(得分:3)
您可以使用mget
从环境中获取对象并将其放入列表中。
mget(VECTOR_OF_NAMES_OF_OBJECTS)
您还可以将mget
与ls()
合并,这样您就不必为自己键入对象名称。
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.
我离开了这个问题,因为我花了很长时间寻找答案,并希望给别人带来麻烦。我不确定这是否是批准的事情。