if()缺少需要TRUE / FALSE的值时出错,但实际上里面有一个布尔参数

时间:2019-10-30 12:48:10

标签: r boolean

我在R中遇到此错误。我正在使用一个数据库,其中我的NA值称为“#VALOR N / A”,所以我做了一个简单的函数来查看我拥有多少个该值。

    estavencido <- function(a){
  count = 0
  for(i in 2:367){
    if(a[i]== "# VALOR N/D"){
      count = count+1
    }
  }
 return(count)
}

但是当我使用该函数时,出现错误,并且看到data [i] ==“#VALOR N / D”返回TRUE / FALSE值,所以我不知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

如果向量a如下所示:

a <- c("# VALOR N/A", "A", "B", "# VALOR N/A")

然后这将起作用:

estavencido <- function(a){
  count = 0
  for(i in seq_along(a)){
    if(a[i] == "# VALOR N/A"){
      count = count+1
    }
  }
  return(count)
}
estavencido(a)

如果i大于向量的长度,则会出现问题,在这种情况下将返回NATRUE都不是的FALSE。如此无法预料的后果就是为什么您应该在seq*循环中使用for函数之一的原因。

但是,您制作的循环并不是您应该如何在R中编写的循环。这样会更好:

sum(grepl("# VALOR N/A", a))

答案 1 :(得分:0)

不是专家,但也许是这样的:

a <- table(a)
a[names(a)=="VALOR N/D"]