上面是顺着你的思路做的改进,在我的电脑上已经通过。
你原来代码中的问题存在于data[is.na(data[,i])]=a这一句,你可以调试一下,is.na(data[,i])返回的是一个(FALSE FALSE TRUE FALSE FALSE)之类的向量,被data[is.na(data[,i])]引用后,会自动循环补齐ncol(data)次,变成选定了第i列有空值的那一整行,并进行赋值,于是就出现了你反映的问题,变成data[is.na(data[, i]), i] 就能特指第i列,就能解决了。
这个错误再次反映了——矩阵本质就是向量。如果用向量化的思维去解决这个问题,可以不用循环就能达成:(假设原数据是矩阵,且每列有且只有一个NA值)