我有一个三维数组,想要总结每个维度的值,最后得到一个数据矩阵。
以下是一个例子:
array1 <- array(c(-5.5,6,3),dim = c(3,4,3))
matrix <- matrix(NA, nrow=3, ncol=4)
matrix
[,1] [,2] [,3] [,4]
[1,] -16.5 -16.5 -16.5 -16.5
[2,] 18 18 18 18
[3,] 9 9 9 9
是否可以通过循环而不是使用任何应用函数来实现?
提前致谢!
答案 0 :(得分:9)
您的问题表明您不想使用apply
功能,但如果您改变主意,请将保证金指定为c(1, 2)
:
apply(array1, MARGIN=c(1, 2), sum)
# [,1] [,2] [,3] [,4]
# [1,] -16.5 -16.5 -16.5 -16.5
# [2,] 18.0 18.0 18.0 18.0
# [3,] 9.0 9.0 9.0 9.0
答案 1 :(得分:2)
您确定要在每个维度上求和吗?您的示例显示了沿第三维的总和。
无论如何,这是如何做到的(你明确表示你不想使用apply
):
X <- array(c(-5.5,6,3), dim = c(3,4,3))
rows <- dim(X)[1]
cols <- dim(X)[2]
result <- matrix(0, nrow=rows, ncol=cols)
for (i in seq(rows)) {
for (j in seq(cols)) {
result[i,j] <- sum(X[i,j,])
}
}
给你
> result
[,1] [,2] [,3] [,4]
[1,] -16.5 -16.5 -16.5 -16.5
[2,] 18.0 18.0 18.0 18.0
[3,] 9.0 9.0 9.0 9.0
编辑:既然你问过(但我会反对这个解决方案,因为它很慢,当然不是在R中做所有这些的惯用方法):
result <- matrix(0, nrow=rows, ncol=cols)
for (i in seq(rows)) {
for (j in seq(cols)) {
for (k in seq(dim(X)[3])) {
result[i,j] <- result[i,j] + X[i,j,k]
}
}
}
请注意,result
已使用零初始化。如果不是这种情况,则必须在j
和k
循环之间对其进行初始化。