2012-02-24 20 views
0

在R中,我有一個多維列表。我可以訪問相同的元素:在多維列表中選擇通配符?

results[["A1"]][["B2"]][["C1"]] 

當然,上面的語句的輸出也是一個列表。

我希望做的是一樣的東西:

results[["A1"]][[*]][["C1"]] 

results[["A1"]][[,]][["C1"]] 

我所需的輸出是一個大名單,這是清單的每個值的級聯(例如「B1」,「B2」......)。

是這樣的可能嗎?我知道我可以迭代所需的尺寸:

for (i in 1:length(results[["A1"]])){ 
    output = c(output, results[["A1"]][[i]][["C1"]] 
} 

但我想知道是否有什麼更清潔?我做錯了什麼嗎?

+0

因爲我沒有在我面前的樣本數據,我不能肯定你開始使用或結尾什麼......但看看'lapply'和'unlist'用'遞歸= FALSE'。這兩個應該讓你找到你想要的。 – Justin 2012-02-24 15:06:23

+0

我不知道如果你仍然想他們名單,但他們do.call(「rbind」,列表),然後轉化成數據幀子集劃分的羣體更容易。 – jdennison 2012-02-24 15:14:32

+0

@Justin:是的,這對我有效。謝謝!我結束了使用像'不公開(lapply(結果[[ 「A1」]],FUN =函數(X){X [[ 「C1」]]}),遞歸= F)' – stepthom 2012-02-24 18:53:10

回答

1

這是行不通的嗎?

sapply(sapply(results[["A1]], "[[", TRUE), "[[", "C1"") 

泛化到第四級爲特定索引名「d」也只是:

sapply(sapply(sapply(results[["A1"]], "[[", TRUE), "[[", "C1"), "[[", "D") 

由內而外的閱讀,因爲人們需要使用嵌套函數調用的事,所有的所述results$A1值的子列表被收集,然後處理以構造只有那些具有「C1」的名稱,然後將該列表減少從窗體results$A1$all-wildcards$C1$D的屈服值被進一步萃取的列表。鑑於「[[」函數將評估其參數,因此如果它們是適當的索引級別的有效列表名稱,則可以提供具有多個值的未引用對象。

+0

這幾乎工作。在我的真實數據集中,實際上在通配符維度之後有兩個維度,即[[「C1」]] [[「D1」]]。語法怎麼看? – stepthom 2012-02-24 18:45:45