我正在尝试编写一个函数来验证数据帧的目标列的NA值。
如果我在函数外运行代码它工作正常。并且返回TRUE,但不是在我尝试将代码放在函数中时。
我确定了我打印naCount和notNaCount的问题并且两者都返回相同的值,它与变量范围有关吗?
我对R.很新。看起来我从根本上缺少一些东西。任何人都可以帮助我,我做错了什么?
validate_NA_Values<- function(referenceNonNAColumn,targetColumn)
{
naCount <-length(which(is.na(targetColumn)))
#print(naCount)
notNaCount <-length(!which(is.na(targetColumn)))
#print(notNaCount)
return(length(referenceNonNAColumn) == naCount+notNaCount)
}
我错过了!哪个(is.na(targetColumn)是根本原因。
要了解我使用了以下内容,
library("missForest")
mtcars.sim.miss<- mtcars
mtcars.sim.miss["simulatedMissinghp"] <- prodNA(data.frame(mtcars$hp),noNA=
0.3)
length(which(is.na(mtcars.sim.miss$simulatedMissinghp)))
length(which(!is.na(mtcars.sim.miss$simulatedMissinghp)))
我认为这一行是问题所在:
notNaCount <-length(!which(is.na(targetColumn)))
这是一个逻辑向量,它将是所有FALSE
,并且与targetColumn
不是NA
的元素一样长。
插图:
x <- c(1, 1, NA, 1, NA)
which(is.na(x))
[1] 3 5
!which(is.na(x))
[1] FALSE FALSE
我想你想要which(!is.na(x))
在我的例子中返回[1] 1 2 4