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
只使用了每个对象中的第一个元素,你能帮我解决一下吗?谢谢!
答案 0 :(得分:3)
我们可以使用thisObj
组合
var response = JSON.parse(req.responseText);
var data = JSON.parse(response.data);
console.log(data.sVar);
或双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/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
。