效用函数:R中的NA值验证

问题描述 投票:-3回答:1

我正在尝试编写一个函数来验证数据帧的目标列的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))) 
r data-analysis na
1个回答
1
投票

我认为这一行是问题所在:

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

© www.soinside.com 2019 - 2024. All rights reserved.