Возврат отсутствующих значений без наведения целого числа (0) - PullRequest
1 голос
/ 14 июня 2019

Я хочу определить, какие значения в одном векторе присутствуют в другом векторе.Иногда в моем приложении нет ни одного из значений первого вектора;в таких случаях я хотел бы NA.Мой текущий подход возвращает целое число (0), когда это происходит:

l <- 1:3
m <- 2:5
n <- 4:6
l[l %in% m]

1] 2 3

l[l %in% n]

целое число (0)

Это сообщение обсуждает, как захватить целое число (0), используя length, но есть ли способ избежать целого числа (0) в первую очередь, и выполнить эту операцию всего за один шаг?Ответы на предыдущий вопрос предполагают, что можно использовать any, но я не вижу, как это будет работать в этом примере.

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Вы можете поймать 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 голос
/ 14 июня 2019

Вы можете сделать:

l[match(l, n)]

[1] NA NA NA

Или:

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

[1] NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...