我想对数组的每个元素求和 5(不是通过所有维度)without 使用循环。结果,我想得到一个维度完全相同的数组,但每个元素都应该添加 5 个。我尝试使用 sum 和 apply 函数,但我要么得到每个元素的总和(一个数字),要么得到这个错误消息:
Error in apply(b[, , , 2], 5, FUN = sum, na.rm = T) :
'MARGIN' does not match dim(X)
我需要有na.rm = T,因为我的数据集中有很多NA,所以我想得到NA + 5 = 5
这是一个例子,我试图将 5 加到所有维度,但到
[,,,1]
:
b <- array(seq(1,48,1), dim = c(4,2,3,2))
b[4,2,3,2] <- NA
我试过:
sum(b[,,,2], 5, na.rm = T)
我期待得到的答案是:
(a <- array(c(seq(1,24,1),seq(25,47,1)+5, 5), dim = c(4,2,3,2)))
R 默认支持添加到矩阵和数组。您可以只使用
+
运算符为向量/矩阵/数组的每个元素添加一个值。由于您只想影响该数组的一部分,只需使用方括号对您想要影响的部分进行子集化:
b[,,,2] <- b[,,,2] + 5
table(b==a, useNA='always')
TRUE <NA>
47 1
你的数组中有
NA
值。在 R 中,默认情况下,涉及 NA
的操作返回 NA
。所以在这种情况下,NA
中的b
值在添加后将保持NA
。
如果你想要不同的行为,例如如果你想要
NA + 5 = 5
,那么你需要在做加法之前将你关心的数组部分的NA值转换为0
is.na(b[,,,2]) <- 0