Подтвердить что ты не робот

Удалить пустые элементы из списка с символом (0)

Как удалить пустые элементы из списка, содержащего парную пар нулей 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.

4b9b3361

Ответ 1

Другая опция (я думаю, более эффективная), сохраняя индекс, где длина элементa > 0:

l[lapply(l,length)>0] ## you can use sapply,rapply

[[1]]
[1] 1 2 3

[[2]]
[1] "foo"

Ответ 2

Один возможный подход:

l <- list(1:3, "foo", character(0), integer(0))
Filter(length, l)
# [[1]]
# [1] 1 2 3
# 
# [[2]]
# [1] "foo"

Ответ 3

Используйте lengths() для определения длин элементов списка:

l <- list(1:3, "foo", character(0), integer(0))
l[lengths(l) > 0L]
#> [[1]]
#> [1] 1 2 3
#> 
#> [[2]]
#> [1] "foo"
#> 

Ответ 4

Для полноты, 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