我正在尝试比较两个向量的相同元素,例如下面的向量 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
它会产生所需的输出,并且可以很好地满足我的目的,但我很好奇是否有一些内置功能可以执行此操作,或者如果没有,我编写的函数是否是产生此结果的最有效方法。
您可以将
identical
与 mapply
一起使用。例如
mapply(identical, a, b)
# [1] TRUE FALSE FALSE TRUE
基集函数
setequal
可以比较两个向量并认为NA是等价的:
setequal(a,b)