R循环运行无报错无输出,查找两列不等行的代码存在什么问题?
问题原因及解决方案
核心错误点
- NA判断逻辑完全错误:R中不能用
==判断值是否为缺失值NA,is.na()是函数,需要传入待判断的对象作为参数,你写的list[[3]][[i]] == is.na()属于语法逻辑完全错误。此外=="NA"是判断字符串类型的"NA",和R内置的缺失值NA完全不是一个概念。 - 任意值和NA做
==/!=比较返回的结果都是NA,在逻辑判断中NA不会被识别为TRUE,因此你写的所有判断条件都不会触发,自然没有输出也不会报错。 - 用
list作为变量名非常不规范,list是R的内置函数名,容易引发命名冲突。
修正后的循环写法
首先修改数据集命名:
df_sub <- as.data.frame(PFC_Data[ ,c(1,6,10)])
修正后的循环代码:
# 用nrow()自动读取数据行数,比硬编码1840更稳妥 for (i in 1:nrow(df_sub)) { # 正确的NA判断写法 if (is.na(df_sub[[3]][i])) { next } if (df_sub[[3]][i] != df_sub[[2]][i]) { print(i) } }
更高效的向量化写法(无需循环)
R原生支持向量化操作,无需写循环即可快速得到结果:
# 直接返回所有符合条件的行号 which(!is.na(df_sub[[3]]) & df_sub[[3]] != df_sub[[2]])
内容的提问来源于stack exchange,提问作者beatricej
相关产品推荐
相关产品推荐

