返回缺少的值而不导出整数(0)

时间:2019-06-14 11:51:49

标签: r

我想确定一个向量中的哪些值存在于另一向量中。有时,在我的应用程序中,第一个向量的值都不存在;在这种情况下,我想要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,但在此示例中我看不到它如何工作。

2 个答案:

答案 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