is.na
возвращает вектор для каждого элемента списка;Вы хотите anyNA
(или, возможно, exactlyNA
, как определено ниже):
l1 <- list("a", NA, 1:3, NA)
l2 <- list("a", NULL, 1:3, NULL)
Filter(Negate(is.na), l1)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] 1 2 3
#>
#> [[3]]
#> [1] NA
#>
#> [[4]]
#> NULL
Filter(Negate(anyNA), l1)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] 1 2 3
exactlyNA <- function(x) identical(x, NA)
Filter(Negate(exactlyNA), l1)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] 1 2 3
Создано в 2018-11-13 пакетом Представления (v0.2.1)
Ваш первый пример эффективно пытается выбрать 1-й, 3-й, 4-й и 5-й элементы вашего списка.Ничего общего с NA
.