【问题标题】:Returning absent values without inducing integer (0)返回不存在的值而不引入整数 (0)
【发布时间】:2019-10-29 01:25:16
【问题描述】:

我想确定一个向量中的哪些值存在于另一个向量中。有时,在我的应用程序中,第一个向量的值都不存在;在这种情况下,我想要 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 捕获整数(0),但是有没有办法一开始就避免整数(0),并且只需一步完成这个操作?对上一个问题的回答表明可以使用any,但我看不出在这个示例中它是如何工作的。

【问题讨论】:

  • i &lt;- l %in% n; if (any(i)) l[i] else NA

标签: r


【解决方案1】:

您可以使用自定义函数捕获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

【讨论】:

    【解决方案2】:

    你可以这样做:

    l[match(l, n)]
    
    [1] NA NA NA
    

    或者:

    any(l[match(l, n)])
    
    [1] NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多