请考虑以下列表作为示例:
l <- list(list("a","b"),"c", list("d","e"))
如果我想删除长度为1的列表,我应该这样做:
l <- lapply(l, function(e){if(length(e) > 1)e})
但结果如下:
> l
[[1]]
[[1]][[1]]
[1] "a"
[[1]][[2]]
[1] "b"
[[2]]
NULL
[[3]]
[[3]][[1]]
[1] "d"
[[3]][[2]]
[1] "e"
删除列表中特定元素的最优雅方法是什么?
答案 0 :(得分:1)
只需发布PoGibas'和jazzurro's comments即可解决问题。如果你们其中一个想发表你的评论作为答案,请随时删除这个答案。
l&lt; - list(list(“a”,“b”),“c”,list(“d”,“e”))
l[lapply(l, length) > 1]
#> [[1]]
#> [[1]][[1]]
#> [1] "a"
#> [[1]][[2]]
#> [1] "b"
#> [[2]]
#> [[2]][[1]]
#> [1] "d"
#> [[2]][[2]]
#> [1] "e"
l[lengths(l) > 1]
#> [[1]]
#> [[1]][[1]]
#> [1] "a"
#> [[1]][[2]]
#> [1] "b"
#> [[2]]
#> [[2]][[1]]
#> [1] "d"
#> [[2]][[2]]
#> [1] "e"
也
identical(l[lapply(l, length) > 1], l[lengths(l) > 1])
#> [1] TRUE