R中只使用了列表的第一个元素

时间:2016-02-13 20:43:11

标签: r list

a,b和c是列表。列表“a”和“b”具有相同数量的对象和元素。

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 = sum(选择(10,3:5)),X2 = sum(选择(10,4:8)),Y1 = sum(选择(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

只使用了每个对象中的第一个元素,你能帮我解决一下吗?谢谢!

1 个答案:

答案 0 :(得分:3)

我们可以使用thisObj组合

var response = JSON.parse(req.responseText);
var data = JSON.parse(response.data);
console.log(data.sVar);

或双lapply/mapplylapply(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/mapply

OP获得警告消息的原因基于mapply/mapply。我们使用Map(function(x,y,z) mapply(function(x,y,z) sum(choose(z, x:y)) , x,y, z) , a, b, c) 得到相应的:元素,但是&#39; a&#39;&#39; b&#39;也是长度大于1的向量。list只能根据相应的向量元素获取单个序列。为了获得相应向量元素的所有序列,我们需要再次循环。所以使用了第二个Map