gpt4 book ai didi

r - R 中 %in% 的优雅版本返回 NA?

转载 作者:行者123 更新时间:2023-12-04 18:20:04 25 4
gpt4 key购买 nike

所以,我对这段 R 代码第三行的行为​​感到惊讶:

x <- c(1, 2, 3, 4, NA, 5, 6, 7, 8)
ifelse(x < 4, 1, 0)
ifelse(x %in% 1:3, 1, 0)

它返回 1,1,1,0,0,0,0,0,0不是 1,1,1,0,NA,0,0,0,0我以为我会得到,即与第二行相同。仔细检查 %in% 的帮助文件和 match显示这是记录在案的行为,返回:

"A logical vector, indicating if a match was located for each element of x: thus the values are TRUE or FALSE and never NA."



有没有类似于 %in%的通用功能除了在这种情况下它会给出NA?例如,这将返回所需的结果:
`%inna%` <- function(x, table){
y <- match(x, table, nomatch = 0) > 0
y[is.na(x)] <- NA
return(y)
}

ifelse(x %inna% 1:3, 1, 0)

但是有没有一种通用的方法来做到这一点?

最佳答案

我们可以用NA代替通过乘以 NA使用 is.na(x) 生成

(x %in% 1:3) * NA^(is.na(x))
#[1] 1 1 1 0 NA 0 0 0 0

或使用 replace
replace(+(x %in% 1:3), is.na(x), NA)
#[1] 1 1 1 0 NA 0 0 0 0

可以转换成函数
`%inna%` <- function(x, table) {
replace(as.integer(x %in% table), is.na(x), NA)
}

x %inna% 1:3
#[1] 1 1 1 0 NA 0 0 0 0

关于r - R 中 %in% 的优雅版本返回 NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50754158/

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