Как вы уже знаете, <<-
или assign
могут использоваться для изменения "глобальной" переменной.<<-
очень похоже на вызов assign
с inherits=TRUE
.
... но, похоже, вы пытаетесь создать матрицу, которая подсчитывает количество вхождений координат ячейки, заданных matrix_b?Это делается более эффективно (без циклов!) С помощью функции table
.Я добавил дубликат строки в matrix_b
, чтобы показать, что он работает:
matrix_a <- matrix(0, nrow = 3, ncol = 3,
dimnames = list(c("r1", "r2", "r3"), c("c1", "c2", "c3")))
matrix_b <- matrix(c("r1", "r2", "r2", "c1", "c2", "c2"), nrow = 3, ncol = 2)
# Convert matrix_b from 2-d to 1-d indices
row <- match(matrix_b[,1], rownames(matrix_a))
col <- match(matrix_b[,2], colnames(matrix_a))
idx <- row+(col-1)*nrow(matrix_a)
# Then count the number of identical indices using table
matrix_a[sort(unique(idx))] <- table(idx)
Какие обновления matrix_a
до:
c1 c2 c3
r1 1 0 0
r2 0 2 0
r3 0 0 0
... конечно, если вам нужно толькочтобы поставить 1
, вам не нужно звонить table
:
row <- match(matrix_b[,1], rownames(matrix_a))
col <- match(matrix_b[,2], colnames(matrix_a))
idx <- row+(col-1)*nrow(matrix_a)
matrix_a[idx] <- 1