通过索引向量更改多个矩阵元素

时间:2020-02-05 17:18:53

标签: r

我有一个矩阵

myMatrix <- matrix(data = 0, nrow = 4, ncol = 4)

     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
[3,]    0    0    0    0
[4,]    0    0    0    0

我想更改特定值

myMatrix[1,1] <- 1
myMatrix[2,3] <- 1
myMatrix[4,4] <- 1

myMatrix

     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    0    1    0
[3,]    0    0    0    0
[4,]    0    0    0    1

如果我有两个包含行和列索引的向量,如何高效/优雅地做到这一点:

rowIndexes <- c(1,2,4)
colIndexes <- c(1,3,4)

分配的值是常量(在这种情况下为1)。

我知道如何使用for循环来执行此操作,但这感觉效率很低。

1 个答案:

答案 0 :(得分:2)

我们可以cbind行/列索引,myMatrix的子集并将值赋给1

myMatrix[cbind(rowIndexes, colIndexes)] <- 1
myMatrix
#     [,1] [,2] [,3] [,4]
#[1,]    1    0    0    0
#[2,]    0    0    1    0
#[3,]    0    0    0    0
#[4,]    0    0    0    1