2011-10-04 42 views
1

在R中,我可以通過執行alist<-alist +1將1添加到列表中的每個元素。但是如果我有像alist<-list(list(1,2,3),list(2,3,4))那樣的東西。有什麼方法可以在不使用循環的情況下爲子列表的每個元素添加1?R在列表中的列表中操作

+0

注意'alist'也是基地的功能,所以避免命名的事情,如果可能的話...... – Tommy

+0

你不能加1到列表中,您一定是指原子向量。稱它爲「alist」只是令人困惑。 – mdsumner

回答

7

在問題列表中寫了,但示例顯示了一個向量。我認爲,OP的意思是:不是一個循環的

alist <- list(list(1, 2, 3), list(2, 3, 4)) 

你可以使用的lapply遞歸版本,請參見:?rapply

> rapply(alist, function(x) x+1, how = "list") 
[[1]] 
[[1]][[1]] 
[1] 2 

[[1]][[2]] 
[1] 3 

[[1]][[3]] 
[1] 4 


[[2]] 
[[2]][[1]] 
[1] 3 

[[2]][[2]] 
[1] 4 

[[2]][[3]] 
[1] 5 
4

我昨天才知道這件事;對於類似情況下的其他人可能會有用; [[允許遞歸索引到列表中,像這樣。

> alist[[c(1,2)]] 
[1] 2 
+0

你是怎麼設計出來的? [[僅用於單個索引選擇,代碼應該用「下標越界」來扼殺。 – mdsumner

+1

這也是我的想法,但是:['[['可以遞歸應用於列表,所以如果單個索引'i'是長度爲'p'的向量,'alist [[i]]'等價於'alist [[i1]] ... [[ip]]'除了最終的索引結果之外,都提供了一個列表。' –

+0

Yikes,好的。現在明白了,那太棒了!這就像數組的矩陣索引。 。 。 – mdsumner