2017-08-30 181 views
1

TL的載體使許多對象的列表; DR:我需要的是一個list()版本向量化。從對象名稱

我試圖創建對象的列表。我不知道會有多少物體,或者它們會被稱爲什麼,可能會有很多物體。所以我不能僅僅手動列表。

但是,我知道,所有的對象都將在我的環境中存在,當談到時間做出的排行榜,我知道我將有一個包含所有對象的名稱一個特徵向量。 (這些是可怕的三層for循環的輸出,我試圖避免做出更大的結果,我可以創建一個空列表,然後在循環創建它們時將對象分配給它, d不喜歡。)

我搜索谷歌和堆棧溢出,但我不能找到一個很好的解決方案。在我看來,我需要的是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. 
+3

'MGET(namesVector)' –

+0

謝謝!使用mget比獲取get要好得多。 –

+0

在鏈接的帖子中查看我的回答。它使用'mget'和'ls'中的模式參數來提取名稱匹配特定模式的對象。鏈接的帖子詢問data.frames,但所有答案都適用於任何類型的R對象。 – lmo

回答

2

您可以使用mget從環境中獲取對象並將它們放入列表中。

mget(VECTOR_OF_NAMES_OF_OBJECTS) 

您還可以結合ls()mget,這樣你就不必鍵入對象名稱你的自我。

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 
+0

這恐怕不能解決我的問題。這些對象實際上不會被稱爲obj1,ob2等,並且會具有動態名稱。 但我很高興知道mget存在,並且ls()可以採用正則表達式。 mget比我的解決方案更好。謝謝! –

0

我找到了解決方案!

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

我要離開這個問題了,因爲我花了這麼長時間尋找答案,並想讓其他人的麻煩。我不確定這是否是被批准的事情。