我有一个三维数组arr
,其中每个数组元素都是具有相同行数和列数的矩阵。然后我有一个三列矩阵m
,其中前两列指定索引(行和列),最后一列指定一个值。
arr = array(0, dim = c(2, 2, 3))
m = matrix(c(1, 2, -100, 2, 1, -99), ncol = 3, byrow = TRUE)
colnames(m) = c("row_index", "column_index", "value")
现在我想为数组的每个元素填充指定索引处的值。我找不到比以下代码更好的方法,但我希望有一种更少的代码重复的解决方案。有什么最好的方法可以做到这一点吗?
arr[, , 1][m[, 1:2]] = m[, 3]
arr[, , 2][m[, 1:2]] = m[, 3]
arr[, , 3][m[, 1:2]] = m[, 3]
replace
:replace(arr, TRUE, apply(arr, 3, replace, m[, 1:2], m[, 3]))
。 - G. Grothendieckreplace
很有趣。 - talatarr <- apply(arr, 3, FUN = function(x) {x[m[,1:2]] <- m[,3]; x})
,结果不同。和arr[] <- ...
有什么区别? - needRhelp[]
用于保持arr
的原始结构。 - talatidx <- array(m[, 1:2], c(2, 2, 3)); arr[idx] <- m[, 3]
能够正常工作。 - rawr