对数组的每个元素求和

问题描述 投票:0回答:1

我想对数组的每个元素求和 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 arrays sum apply
1个回答
1
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.