论坛说明仍然没有仔细看,
http://cos.name/bbs/read.php?tid=1553 一、5
“关于R的一点初级入门材料”的session4文档中第四页的命令肯定是有问题的,作者似乎伪造了一个结果,或者作者之前设置了选项,禁用了错误信息的显示:options(show.error.messages = F),然后出错了就不会提示。
真正防止出错的办法肯定是首先要判断是否NA,然后才能做逻辑运算,因此规范的代码应该是这样:
for (i in 1:length(cc)){<br />
if(!is.na(cc[i])){<br />
if (cc[i]==2) cc[i]<-"Middle Income"<br />
if (cc[i]==3) cc[i]<-"Low Income"}<br />
}
话说回来,这段代码本身就不规范,初学者可能看不出问题,其实是有隐患的。比如给第i个元素赋值为字符时,整个cc的类型就变成字符型了,而不再是数值型,里面有恰好有一个巧合:数字2与字符"2"做逻辑运算是相等的。因此整个赋值过程可以顺利实施。所以,最好是不要用变量本身同时做逻辑比较和赋值,而是在另一个变量中赋值。