R 中 NA 元素向量的条件语句

If Any Conditional Statement for Vector of NA elements in R

我运行这个if (any())条件语句在R中,期望的结果如下:

a <- c(1, 4, 6, 3, 2)
b <- 9
d <- 0
if(any(a < b)) d = d + 1
d
# 1

我也在 R 中 运行 这个 if (any()) 条件语句,期望的结果如下:

a <- c(NA, NA, NA, 3, 2)
b <- 9
d <- 0
if(any(a < b)) d = d + 1
d
# 1 

但是这个if (any())条件语句在R运行s与error message中如下:

a <- c(NA, NA, NA, NA, NA)
b <- 9
d <- 0
if(any(a < b)) d = d + 1
d
# Error in if (any(a < b)) d = d + 1 : 
  # missing value where TRUE/FALSE needed

NA 的向量是必需的,因为我正在 运行 宁 for loop 并且在第一轮中,向量的元素不存在(缺失)但将是从第二个 运行.

开始填充

我想要的

我想要一种没有错误的方法。

也许我们可以用第一个表达式来检查a中的all个元素是否是NA,而在else if部分,我们指定a < b.

if (all(is.na(a))) d = d else if (any(a < b)) d = d + 1

# or better formatted
if (all(is.na(a))) {
  d = d
} else if (any(a < b)) {
  d = d + 1
}

any 有参数 na.rm,您可以将其设置为 TRUE 以忽略 NA 值。

a <- c(NA, NA, NA, NA, NA)
b <- 9
d <- 0
if(any(a < b, na.rm = TRUE)) d = d + 1

d
#[1] 0