儘可能快,我想用存儲在另一個向量中的值替換矩陣某些行中的第一個零。替換矩陣行中的第一個零元素,
有一個數字矩陣,其中每一行是一個有零點的向量。 我也有兩個向量,其中一個包含行,在要替換的內容中,另一個是新值: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矩陣是一組列向量。如果我將數據存儲在轉置表單中,我會獲得任何收益嗎?這將意味着在列而不是行上工作。
上下文:
該矩陣存儲接觸的網絡的ID-S。這不是鄰接矩陣n x n,而是n x max.number.of.partners(或n * = 30)矩陣。
默認情況下,網絡使用edgelist,但我想將「從X的所有鏈接」存儲在一起。
我假定,但不知道這是更有效的比總是提取從EdgeList都(多次每一輪在仿真中)的信息
我還假定該直線生長矩陣形式比存儲快相同格式化列表中的相同信息。
對這些背景假設的一些評論也是受歡迎的。
'矩陣[replace.in.these.rows + nrow(矩陣)*(corresponding.poz.of.the.1st.zero-1)] < - new.values' – James