比较两个向量之间的 NA 的 R 方法

问题描述 投票:0回答:2

我正在尝试比较两个向量的相同元素,例如下面的向量 a 和 b。

# vectors a and b
a <- c(1, 2, 3, NA)
b <- c(1, 3, NA, NA)

# compare for identity
a == b

## [1]  TRUE FALSE    NA    NA

但是,我希望比较包含 NA,这样当给定位置的两个元素均为 NA 时,结果为 TRUE,但如果只有一个为 NA,则结果为 FALSE。为此,我编写了下面的函数。

# function to include NA's in the comparison
compare_incl_NA <- function(vec1, vec2){
  res = ifelse(is.na(vec1) | is.na(vec2), 
               is.na(vec1) & is.na(vec2), 
               vec1 == vec2)
  res
}

# run function
compare_incl_NA(a,b)

## [1]  TRUE FALSE FALSE  TRUE

它会产生所需的输出,并且可以很好地满足我的目的,但我很好奇是否有一些内置功能可以执行此操作,或者如果没有,我编写的函数是否是产生此结果的最有效方法。

r vector logic na logical-operators
2个回答
1
投票

您可以将

identical
mapply
一起使用。例如

mapply(identical, a, b)
# [1]  TRUE FALSE FALSE  TRUE

0
投票

基集函数

setequal
可以比较两个向量并认为NA是等价的:

setequal(a,b)
© www.soinside.com 2019 - 2024. All rights reserved.