2013-03-07 50 views
11

是否有一種簡單的方法可以在列表中進行簡單的計算?R列表中的兩個列表的總和

x <- list(a=list(1:4),b=list(1:6)) 
y <- list(a=list(1:4),b=list(1:6)) 

當我嘗試:

x+y 

我收到錯誤: 錯誤X + Y:非數字參數二元運算

X和Y是相同的長度,並且含有隻有整數。用矩陣可以做y + x,有沒有辦法做到這一點與清單列表?

+0

只需用 「+」 不是'list'實現。這是因爲'list'可以包含任何R對象。因此,沒有不明確的方式來添加「list」的元素。 – 2013-03-07 14:42:46

回答

10

您可以使用lapply同時通過每2名列表。

lapply(seq_along(x),function(i) 
     unlist(x[i])+unlist(y[i])) 

[[1]] 
a1 a2 a3 a4 
2 4 6 8 

[[2]] 
b1 b2 b3 b4 b5 b6 
2 4 6 8 10 12 

如果X和Y不具有相同的長度,你可以這樣做:

lapply(seq_len(min(length(x),length(y)),function(i) 
     unlist(x[i])+unlist(y[i])) 
+0

另一個不錯的答案!,不知道lapply的這種用法,我總是在列表中使用lapply,所以元素被用在函數中,但是使用這種方式我無法獲得y元素。 – Jetse 2013-03-07 14:52:01

+1

@Jetse lapply可以迭代任何列表或迭代器。但這裏的解決方案是'mapply' – agstudy 2013-03-07 14:54:41

+0

選擇這個答案,因爲這保持我的列表結構。 – Jetse 2013-03-07 15:00:46

10

假設每個列表具有相同的結構,你可以使用mapply如下

mapply(function(x1, y1) x1[[1]]+y1[[1]], x, y) 
+0

謝謝,mapply是我一直在尋找的功能!以前不知道這個函數,只知道應用和lapply ... – Jetse 2013-03-07 14:48:52

+0

用它在我的最終數據集上,然後我發現我失去了我的列表結構,agstudy他的答案保持我的列表結構。 – Jetse 2013-03-07 14:59:49

+3

@Jetse嘗試添加'SIMPLIFY = FALSE'。 – 2013-03-07 15:00:47