Как удалить список списков из другого списка списков в R? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть два списка списков, сгенерированных следующей функцией:

 a <- replicate(10, sample(1:100,size=10), simplify=FALSE)
 b <- replicate(10, sample(1:100,size=10), simplify=FALSE)

Есть ли способ удалить числа в списках 'b' из соответствующих списков в 'a', так что если:

a[1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
b[1] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}

тогда в идеале вывод будет

c[1] = {1}

Я пытался сделать что-то подобное, но это не сработало:

for(i in 1:10){
index <- which( names(a[i]) %in% b[i])
a[i][-index]
}

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 25 марта 2020

дополнительный раствор

a <- list(c(1:10))
b <- list(c(2:11))

purrr::map2(.x = a, .y = b, .f = dplyr::setdiff)
1 голос
/ 25 марта 2020

Мы можем использовать Map с setdiff

Map(setdiff, b, a)

Если это наоборот

Map(setdiff, a, b)

Или другой вариант - vsetdiff для сохранения дублирующих элементов

library(vecsets)
Map(vsetdiff, a, b)

Или используйте %in% и отрицайте (!)

Map(function(x, y) x[!x %in% y], a, b)

Или используйте for l oop

for(i in seq_along(a)) a[[i]] <- a[[i]][!a[[i]] %in% b[[i]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...