替换每个数组元素的矩阵值

3

我有一个三维数组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]
1个回答

4
这个应用程序的方法如何呢?
arr[] <- apply(arr, 3, FUN = function(x) {x[m[,1:2]] <- m[,3]; x})

arr
# , , 1
# 
# [,1] [,2]
# [1,]    0 -100
# [2,]  -99    0
# 
# , , 2
# 
# [,1] [,2]
# [1,]    0 -100
# [2,]  -99    0
# 
# , , 3
# 
# [,1] [,2]
# [1,]    0 -100
# [2,]  -99    0

1
不错。在上述代码中也可以使用replacereplace(arr, TRUE, apply(arr, 3, replace, m[, 1:2], m[, 3])) - G. Grothendieck
@G.Grothendieck,谢谢。那个外部的 replace 很有趣。 - talat
太好了!我尝试了arr <- apply(arr, 3, FUN = function(x) {x[m[,1:2]] <- m[,3]; x}),结果不同。和arr[] <- ...有什么区别? - needRhelp
@needRhelp 空的 [] 用于保持 arr 的原始结构。 - talat
希望 idx <- array(m[, 1:2], c(2, 2, 3)); arr[idx] <- m[, 3] 能够正常工作。 - rawr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接