Удалить элементы из вложенных списков, которые содержат определенную строку - PullRequest
0 голосов
/ 03 февраля 2019

Я хотел бы удалить вложенные элементы списка R, содержащие строку available.Однако мне нужно сохранить размер списка (т. Е. NULL, если все элементы удалены).Приведенный ниже код создает возможный ввод, из которого должны быть удалены все элементы:

nested.list <- list()
for(lop in 1:4){
nested.list[[lop]] <- c("available","available")}

Ожидаемый вывод:

for(lop in 1:4){
nested.list.out[lop] <- list(NULL)} 

Однако, если элемент отличается от available,это должно быть сохранено.Давайте предположим следующий ввод:

nested.list[[1]][[2]] <- "hold" 

Ожидаемый вывод будет:

nested.list.out[[1]] <- "hold"

Важно подчеркнуть, что строка hold приведена только в качестве примера.В моем реальном наборе данных каждый элемент каждого вложенного списка может иметь случайные строки, и все они должны храниться в моем выводе.Есть идеи сделать это с умом?

1 Ответ

0 голосов
/ 03 февраля 2019

Самый простой способ - использовать lapply для циклического перемещения по списку.На каждой итерации удаляйте все available строки и возвращайте NULL, если результирующий вектор пуст.

nested.list.out <- lapply(nested.list, function(x) {
    x <- x[x != "available"]  # Remove "available" from vector
    if (length(x) < 1){
        # Here resulting vector is empty, so return NULL
        return(NULL)
    } else {
        return(x)
    }
})
...