Arrays 在多维数组上应用带条件语句的函数

Arrays 在多维数组上应用带条件语句的函数,arrays,r,if-statement,multidimensional-array,apply,Arrays,R,If Statement,Multidimensional Array,Apply,我有两个3D阵列: a=array(1:27, dim=c(3,3,3)) b=array(c(0,2,6,0), dim=c(3,3,3)) 我想将数组a中沿z维的所有值相加(得到一个2D矩阵),其中数组b中对应的x,y,z位置的值大于0 我更喜欢apply(最好是标准函数)和if语句的组合,比如 summed=apply(a, c(1,2), sum {if(b[b>0])}) 这给了我语法错误。我在这里遗漏了什么?我们可以用“b”的逻辑数组乘以“a”。通过将“a”乘以二进制数组“

我有两个3D阵列:

a=array(1:27, dim=c(3,3,3))
b=array(c(0,2,6,0), dim=c(3,3,3))
我想将数组a中沿z维的所有值相加(得到一个2D矩阵),其中数组b中对应的x,y,z位置的值大于0

我更喜欢apply(最好是标准函数)和if语句的组合,比如

summed=apply(a, c(1,2), sum {if(b[b>0])})

这给了我语法错误。我在这里遗漏了什么?

我们可以用“b”的逻辑数组乘以“a”。通过将“a”乘以二进制数组“b”,在“b”中为0的元素在“a”中将变为0,1*number保留为number

a* (b > 0) 
然后,我们用
aperm
转置数组,得到
colSums

colSums(aperm(a * (b > 0), c(3, 1, 2)))
#      [,1] [,2] [,3]
#[1,]   10   26   16
#[2,]   22   14   34
#[3,]   12   30   18

b>0语句至关重要。除了1之外,b中可能还有其他大于0的值,但我只是想让示例保持简单。对不起,我会编辑它。@Elli如果是这样,你应该更改示例。这给人的印象是数组是二进制的OK,但我不想求a和b的和,而是沿z方向求a的和。b只是条件,如果a中的对应值用于求和或不用于求和。@Elli请检查更新是否是您要寻找的答案是的,这按预期工作,非常好!谢谢你的努力:)如果我在这里有更多的声誉分数,我会投票给你…也许
apply(a*(b>0),c(1,2),sum)
?从编写一个在简单向量上工作的函数开始
sum{if(b[b>0[])}
给出了一个语法错误,因为有语法错误——实际上有很多语法错误。
{
用于对多个语句进行分组,但在这里您尝试执行其他操作。
if
后面应该有一个条件
(括号中)
计算结果为
TRUE
FALSE
,然后是一个语句(可能是由
{
连接的一组语句)。当然,非常简单但非常出色。非常感谢:)你必须从中得出答案。