如何从 R 列表中提取元素及其索引

Mea*_*gan 4 r extract list

我想在 R 中提取列表元素及其索引,同时删除长度为 0 的项目。假设我在 R 中有以下列表:

l1 <- character(0)
l2 <- c("a","b")
l3 <- c("c","d","e")
list1 <- list(l1, l1, l2, l1, l3)
Run Code Online (Sandbox Code Playgroud)

然后list1返回以下内容:

[[1]]
character(0)
[[2]]
character(0)
[[3]]
[1] "a" "b"
[[4]]
character(0)
[[5]]
[1] "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)

我想以某种方式提取一个对象,该对象显示每个非空元素的索引/位置以及该元素的内容。所以看起来像这样:

[[3]]
[1] "a" "b"
[[5]]
[1] "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)

我最接近的做法是删除空元素,但随后我会丢失剩余元素的原始索引/位置:

list2 <- list1[lapply(list1, length) > 0]
list2
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 5

keep,将保留与谓词匹配的元素。negate(is_empty)创建一个函数,TRUE如果向量不为空则返回。

library("purrr")


names(list1) <- seq_along(list1)
keep(list1, negate(is_empty))
#> $`3`
#> [1] "a" "b"
#> 
#> $`5`
#> [1] "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)