Удалить дубликаты во вложенном списке - PullRequest
2 голосов
/ 10 апреля 2020

У меня большой список списков, в котором я хочу удалить дублированные элементы в каждом списке. Пример:

x <- list(c("A", "A", "B", "C"), c("O", "C", "A", "Z", "O"))

x 

[[1]]
[1] "A" "A" "B" "C"

[[2]]
[1] "O" "C" "A" "Z" "O"

Я хочу, чтобы результатом был список, который выглядит следующим образом, где удаляются дубликаты в списке, но структура списка остается.

[[1]]
[1] "A" "B" "C"

[[2]]
[1] "O" "C" "A" "Z"

Моя основная стратегия состояла в том, чтобы использовать rapply (также пробовал lapply) для выявления дубликатов и их удаления. Я попытался:

x[rapply(x, duplicated) == T]

, но получил следующую ошибку:

" Ошибка: (список) объект не может быть приведен к типу 'логический' "

Кто-нибудь знает способ решения этой проблемы?

Спасибо!

1 Ответ

1 голос
/ 10 апреля 2020

Мы можем использовать lapply с unique

lapply(x, unique)
#[[1]]
#[1] "A" "B" "C"

#[[2]]
#[1] "O" "C" "A" "Z"

Проблема с rapply заключается в том, что он рекурсивно применяет дубликат, а затем возвращает один вектор вместо list логических векторов

rapply(x, duplicated)
#[1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

Вместо этого может быть

lapply(x, function(u) u[!duplicated(u)])
#[[1]]
#[1] "A" "B" "C"

#[[2]]
#[1] "O" "C" "A" "Z"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...