Как можно быстрее, я хотел бы заменить первые нули в некоторых строках матрицы значениями, хранящимися в другом векторе.
Существует числовая матрица, в которой каждая строка представляет собой вектор с несколькими нулями.У меня также есть два вектора, один из которых содержит строки, в которых нужно заменить, а другой - новые значения: replace.in.these.rows
и new.values
.Кроме того, я могу сгенерировать вектор первых нулей с помощью sapply
mat <- matrix(1,5,5)
mat[c(1,8,10,14,16,22,14)] <- 0
replace.in.these.rows <- c(1,2,3)
new.values <- c(91,92,93)
corresponding.poz.of.1st.zero <- sapply(replace.in.these.rows,
function(x) which(mat [x,] == 0)[1] )
Теперь я хотел бы что-то, что перебирает индексные векторы, но без цикла for возможно:
matrix[replace.in.these.rows, corresponding.poz.of.the.1st.zero ] <- new.values
Есть ли уловка с индексированием более простых векторов?Он не может использовать список или массив (например, по столбцам) в качестве индекса.
По умолчанию матрицы R представляют собой набор векторов столбцов.Получу ли я что-нибудь, если буду хранить данные в транспонированной форме?Это означало бы работать со столбцами вместо строк.
Контекст :
В этой матрице хранятся идентификаторы контактов сети.Это не матрица смежности nxn, а матрица nx max.number.of.partners (или n * = 30).
В сети по умолчанию используется список краев, но я хотел сохранить все ссылки из X"Вместе.
Я предположил, но не уверен, что это более эффективно, чем всегда извлекать информацию из списка краев (несколько раз каждый раунд в симуляции)
Я также предполагал, что это линейно растетматричная форма быстрее, чем хранение той же информации в том же отформатированном списке.
Приветствуются также некоторые комментарии к этим контекстным предположениям.