gpt4 book ai didi

r - 如何将 `==`行为扩展到包含NA的向量?

转载 作者:行者123 更新时间:2023-12-03 09:07:10 26 4
gpt4 key购买 nike

我完全找不到关于此特定问题的其他r-help或Stack Overflow讨论。抱歉,如果有明显的地方。我相信我只是在寻找最简单的方法来获得R的==符号以永不返回NA。

# Example #

# Say I have two vectors
a <- c( 1 , 2 , 3 )
b <- c( 1 , 2 , 4 )
# And want to test if each element in the first
# is identical to each element in the second:
a == b
# It does what I want perfectly:
# TRUE TRUE FALSE

# But if either vector contains a missing,
# the `==` operator returns an incorrect result:
a <- c( 1 , NA , 3 )
b <- c( 1 , NA , 4 )
# Here I'd want TRUE TRUE FALSE
a == b
# But I get TRUE NA FALSE

a <- c( 1 , NA , 3 )
b <- c( 1 , 2 , 4 )
# Here I'd want TRUE FALSE FALSE
a == b
# But I get TRUE NA FALSE again.

我得到想要的结果:
mapply( `%in%` , a , b )

但是 mapply对我来说似乎很沉重。

有没有更直观的解决方案?

最佳答案

另一个选择,但是它比mapply('%in%', a , b)好吗?:

(!is.na(a) & !is.na(b) & a==b) | (is.na(a) & is.na(b))

根据@AnthonyDamico的建议,创建“mutt”运算符:
"%==%" <- function(a, b) (!is.na(a) & !is.na(b) & a==b) | (is.na(a) & is.na(b))

编辑:或@Frank稍有不同和较短的版本(也更有效)
"%==%" <- function(a, b) (is.na(a) & is.na(b)) | (!is.na(eq <- a==b) & eq)

使用不同的示例:
a <- c( 1 , 2 , 3 )
b <- c( 1 , 2 , 4 )
a %==% b
# [1] TRUE TRUE FALSE

a <- c( 1 , NA , 3 )
b <- c( 1 , NA , 4 )
a %==% b
# [1] TRUE TRUE FALSE

a <- c( 1 , NA , 3 )
b <- c( 1 , 2 , 4 )
a %==% b
#[1] TRUE FALSE FALSE

a <- c( 1 , NA , 3 )
b <- c( 3 , NA , 1 )
a %==% b
#[1] FALSE TRUE FALSE

关于r - 如何将 `==`行为扩展到包含NA的向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com