R - 高效循环矩阵

R - efficiently loop through matrix

我有一个包含 150 列(列名是 1,2,3,4,5,6,7,...)和 100000 行的矩阵(名为 "my_matrix")。

我执行以下操作:

missing = c(50,57,60,77,99,101,102,109)

for(i in 1:ncol(my_matrix)) {
  if(colnames(my_matrix)[i] %in% missing) {
    for(j in 1:nrow(my_matrix)) {
        if(grepl('_old$', rownames(my_matrix)[j])){
          my_matrix[j,i] <- my_matrix[gsub("_old", "_new", rownames(my_matrix)[j]),i]
        }
    }
  }
}

此操作运行良好,基本上是查看是否在 "missing" 中找到了列名。如果是,则查看该行的名称是否以“_old”结尾。如果是这样,该单元格的值将替换为另一个单元格的值(例如,第 50 列和行 237478_old 的值将替换为第 50 列和行 237478_new 的值,依此类推)。

不幸的是,执行速度非常慢,需要数小时才能完成。有没有更快的方法来执行此操作(例如使用应用)?

提前致谢!

我们创建列 ('j1') 和行(对于 'new' 和 'old' 行名称)的索引,并使用 row/column 索引并替换为 "new" row/column 值中的值。

 j1 <- colnames(my_matrix) %in% missing
 i1 <- grepl('_old$', rownames(my_matrix))
 i2 <- grepl('_new$', rownames(my_matrix))
 my_matrix[i1,j1] <- my_matrix(i2, j1]