我们在运行R程序的时候,有时候会出现:需要TRUE/FALSE值的地方不可以用缺少值
这样的错误提示。但是,检查自己的程序,却没发现错误。其实,产生这个错误的原因出现在if语句的返回值上。
先看下面一个例子:
> for (i in 1:nrow(d)){if (d$phylum[i]=="Cyanobacteria") {d$tax.color[i]<-100}}
错误于
if (d$phylum[i] == "Cyanobacteria") { :
需要TRUE/FALSE值的地方不可以用缺少值
原因:
if得到的必须是TRUE/FALSE,我得到了NA
d$phylum=="Cyanobacteria" 发现出来的结果有FALSE,有TRUE,有NA,一检查果真是有空白值
解决办法:
d$phylum[is.na(d$phylum)]<-0
> for (i in 1:nrow(d)){if (d$phylum[i]=="Cyanobacteria") {d$tax.color[i]<-100}}
这也提醒我们,在写if语句时,可以先判断一下是不是会有NA返回值。具体方法见R技巧[25]:R判断NaN