Ответ 1
Другая опция (я думаю, более эффективная), сохраняя индекс, где длина элементa > 0:
l[lapply(l,length)>0] ## you can use sapply,rapply
[[1]]
[1] 1 2 3
[[2]]
[1] "foo"
Как удалить пустые элементы из списка, содержащего парную пар нулей
character(0)
, integer(0)
и т.д.
list2
# $`hsa:7476`
# [1] "1","2","3"
#
# $`hsa:656`
# character(0)
#
# $`hsa:7475`
# character(0)
#
# $`hsa:7472`
# character(0)
Я не знаю, как с ними бороться. Я имею в виду, если NULL
это намного проще. Как удалить эти элементы так, чтобы в списке осталось только hsa:7476
.
Другая опция (я думаю, более эффективная), сохраняя индекс, где длина элементa > 0:
l[lapply(l,length)>0] ## you can use sapply,rapply
[[1]]
[1] 1 2 3
[[2]]
[1] "foo"
Один возможный подход:
l <- list(1:3, "foo", character(0), integer(0))
Filter(length, l)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] "foo"
Используйте lengths()
для определения длин элементов списка:
l <- list(1:3, "foo", character(0), integer(0))
l[lengths(l) > 0L]
#> [[1]]
#> [1] 1 2 3
#>
#> [[2]]
#> [1] "foo"
#>
Для полноты, purrr пакет из популярного tidyverse имеет некоторые полезные функции для работы со списками - compact
(введение) тоже трюк, и отлично работает с трубами magrittr %>%
:
l <- list(1:3, "foo", character(0), integer(0))
library(purrr)
compact(l)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] "foo"
или
list(1:3, "foo", character(0), integer(0)) %>% compact