【发布时间】:2015-11-24 11:51:18
【问题描述】:
在给定的矩阵 a 中,带有整数和一些 NA :
如果我想用 99 替换所有 NA,我会这样做:
a[is.na(a)]<-99
如果我只想对第 2 列做同样的事情,下面的效果很好:
a[is.na(a[,2]),2]<-99
但如果我想为第 1 列和第 2 列执行此操作,这是行不通的:
a[is.na(a[,1:2]),1:2]<-99
都没有
a[is.na(a[,c(1:2)]),c(1:2)]<-99
上面写着(抱歉,用法语):
[<-(*tmp*, is.na(a[, c(1:2)]), c(1:2), value = 99) 中的错误:
(下标) indice logique trop long
有人知道为什么吗?
【问题讨论】:
-
如果问题是why 而不是how,那么答案是因为
is.na(a[,c(1:2)])已经返回了一个二维逻辑矩阵 i>,再加上c(1:2),matrix可以处理的维度太多了。在 R 中调试时,您应该从内到外检查内部函数首先执行的操作,然后再检查最终操作。