for 循环中的 gsub 不是 运行?

gsub in for loop not running?

出于某种原因,我的 for 循环中的这一行 gsub 没有执行。基本上,我希望做的是针对元素开头和结尾的特定字符,我想将其取出。所以在我的示例代码中,我只保留以 0 开头的值或以其他方式删除它(在代码中,我正在处理矩阵中存储的所有内容都是一个字符向量,我想做的是删除一个重复的特定每个向量开头和结尾的字符)。但是,一旦我的脚本完成 运行

,m2 没有任何变化
m2 <- matrix( c(2, 0, 0, 0, 2, 0, 0, 0, 2), nrow=3, ncol=3)
rownames(m2) <- c("a", "d", "e")
colnames(m2) <- c("x", "w", "z")

for (i in 1:length(rownames(m2))){
  for (j in 1:length(colnames(m2))){
    if (substr(m2[i,j], 1, 1) == "0") {
      m2 <- m2
    } else (m2 <- gsub("^.", "", m2))
  }
}

m2 中要替换任何不以 0 开头的内容,您可以使用 startsWith

m2[!startsWith(as.character(m2), "0")] <- ''
m2

#   x   w   z  
#a ""  "0" "0"
#d "0" ""  "0"
#e "0" "0" "" 

我们可以使用replace

replace(m2, m2 != 0, "")
#    x   w   z  
#a ""  "0" "0"
#d "0" ""  "0"
#e "0" "0" "" 

如果我们需要`替换不以'0'开头的值

replace(m2, substr(m2, 1, 1) != 0, "")
#   x   w   z  
#a ""  "0" "0"
#d "0" ""  "0"
#e "0" "0" ""