我想确定一个向量中的哪些值存在于另一向量中。有时,在我的应用程序中,第一个向量的值都不存在;在这种情况下,我想要NA。我目前的方法是在发生这种情况时返回integer(0):
l <- 1:3
m <- 2:5
n <- 4:6
l[l %in% m]
1] 2 3
l[l %in% n]
整数(0)
This post讨论了如何使用length
捕获integer(0),但是有没有一种方法可以避免整数(0),并且只需一步就可以完成此操作?上一个问题的答案表明可以使用any
,但在此示例中我看不到它如何工作。
答案 0 :(得分:2)
您可以使用自定义功能捕获integer(0)
:
l <- 1:3
m <- 2:5
n <- 4:6
returnsafe <- function(a, b) {
result <- a[a %in% b]
if(is.integer(result) && length(result) == 0L) {
return(NA)
} else {
return(result)
}
}
> returnsafe(l, n)
[1] NA
答案 1 :(得分:1)
您可以这样做:
l[match(l, n)]
[1] NA NA NA
或者:
any(l[match(l, n)])
[1] NA