Error :: is.na()应用于'NULL'类型的非(列表或向量)

时间:2016-06-09 06:34:16

标签: r

当我使用下面的代码时,它会给我所需的输出

subset(ndata,!is.na(ndata$LHeart_Failure))

当我以其他形式执行上述相同代码时

out <- "LHeart_Failure"
subset(ndata,!is.na(ndata$out))

它给了我错误:

logical(0)
Warning message:
In is.na(ndata$out) :
is.na() applied to non-(list or vector) of type 'NULL'

这里的ndata是.csv文件中的数据。 LHeart_Failure是列的名称,我希望通过该名称找到该特定列中没有“NA”的所有行(即LHeart_Failure中没有NA的所有行)。

3 个答案:

答案 0 :(得分:2)

当我尝试在不存在的数据框列上调用is.na()时,我收到此错误消息,例如

> ndata <- data.frame(v1=c(1:3), v2=c("one", "two", "three"))
> subset(ndata, !is.na(ndata$out))
[1] v1 v2
<0 rows> (or 0-length row.names)
Warning message:
In is.na(ndata$out) :
  is.na() applied to non-(list or vector) of type 'NULL'

因此,在尝试使用它进行子集之前,应确保列out实际存在。

我个人会避免使用subset而是明确地对数据框进行子集化。根据您所写的内容,您似乎希望保留数据框ndata中的行,其中out的值为NA。在这种情况下,您可以尝试:

ndata[!is.na(ndata$out), ]

答案 1 :(得分:1)

错误是因为数据结构ndata不包含任何名为out的列。使用命令:

out <- "LHeart_Failure"

您只需使用字符串内容out创建变量"LHeart_Failure"。如果您想使用out作为LHeart_Failure列的等效内容,则必须致电:

out <- ndata$LHeart_Failure

接着是

found_idxs <- which[!is.na(out)]

答案 2 :(得分:0)

ndata$out假设数据out中存在ndata列。 如果您想使用已保存在out中的字符串作为列名来过滤数据,我建议您这样做:

out <- "LHeart_Failure"
ndata[!is.na(ndata[,out]),]