Изменить несколько элементов матрицы по индексным векторам - PullRequest
2 голосов
/ 05 февраля 2020

У меня есть матрица

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 -l oop, но это чувствует себя неэффективным.

1 Ответ

2 голосов
/ 05 февраля 2020

Мы можем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...