2016-02-13 33 views
2

a,b和c是列表。列表「a」和「b」具有相同數量的對象和元素。「僅使用列表的第一個元素」R

a<-list(c(3,4,5),c(1,3)) 
b<-list(c(5,8,7),c(6,8)) 
c<-list(10,9) 

> a 
[[1]] 
[1] 3 4 5 

[[2]] 
[1] 1 3 

> b 
[[1]] 
[1] 5 8 7 

[[2]] 
[1] 6 8 

> c 
[[1]] 
[1] 10 

[[2]] 
[1] 9 

我要計算的總和 「選擇(C,A:B)」,在相應的位置。預期的結果是一個列表,它也有兩個分別包含3個和2個元素的對象。正如:

[[1]] 
[1] X1 X2 X3 

[[2]] 
[1] Y1 Y2 

例如:X1 =總和(選擇(10,3:5)),X2 =總和(選擇(10,4:8)),Y1 =總和(選擇(9,1 :6))......

我嘗試使用下面的代碼來計算:

mapply(function(a,b,c) sum(choose(c,a:b)), a,b,c) 

,但我得到的警告:

[1] 582 465 
Warning messages: 
1: In a:b : numerical expression has 3 elements: only the first used 
2: In a:b : numerical expression has 3 elements: only the first used 
3: In a:b : numerical expression has 2 elements: only the first used 
4: In a:b : numerical expression has 2 elements: only the first used 

只有在每個第一要素對象已被使用,可以喲你幫我弄明白了嗎?謝謝!

回答

3

我們可以使用一個lapply/mapply組合

lapply(seq_along(a), function(i) 
    mapply(function(x,y,z) sum(choose(z,x:y)), a[[i]], b[[i]], c[[i]])) 
#[[1]] 
#[1] 582 837 582 

#[[2]] 
#[1] 465 465 

或雙Map/mapplymapply/mapply

Map(function(x,y,z) mapply(function(x,y,z) 
     sum(choose(z, x:y)) , x,y, z) , a, b, c) 

之所以OP得到了警告信息是基於:。我們得到相應的list元素與Map,但是'a','b'中的每個元素也是一個長度大於1的向量。:只能根據相應的向量元素採用單個序列。爲了獲得相應向量元素的所有序列,我們需要再次循環。所以使用第二個Map/mapply

+1

謝謝!哦,':'是原因,難怪我可以計算''a + b'',但是不能計算':'。 – lightsnail

相關問題