Выберите более длинный и задайте индекс более короткого вектора R - PullRequest
2 голосов
/ 25 октября 2019

setdiff() требует, чтобы его первый векторный аргумент был длиннее, чем его второй векторный аргумент. Чтобы преодолеть это ограничение, я стараюсь всегда указывать более длинный из двух аргументов и более короткий второй.

which.max() дает индекс (ind) более длинного аргумента, но мне интересно, как получитьind для более короткого аргумента без использования which.min()?

Вот что я делаю:

a = c("bob", "jim", "jon")
b = c("bob", "jim", "jon", "al")

NAMES <- list(a, b)

ind <- which.max(sapply(NAMES, length)) # index for lengthier of `a` and `b` 

setdiff(NAMES[[ind]], NAMES[[???]])#But what to put for ind of shorter arg: NAMES[[!ind]] fails

1 Ответ

2 голосов
/ 25 октября 2019

Мы можем использовать [ вместо [[ (для общего случая)

ind <- which.max(lengths(NAMES)) # lengths would be more efficient

Используя пример, где length из list равно только 2, используйте -

setdiff(NAMES[[ind]], NAMES[[-ind]])
#[1] "al"

Если длина list больше 2, выполните цикл по NAMES[-ind] с sapply

lapply(NAMES[-ind], setdiff, x = NAMES[[ind]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...