如何从包含零长度对列表的列表中删除空元素
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
保留在列表中的元素。
通过保持元素长度 > 0 的索引的另一种选择(我认为更有效):
l[lapply(l,length)>0] ## you can use sapply,rapply
[[1]]
[1] 1 2 3
[[2]]
[1] "foo"
一种可能的方法是
Filter(length, l)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] "foo"
在哪里
l <- list(1:3, "foo", character(0), integer(0))
这是因为正整数被强制转换TRUE
为Filter
,因此被保留,而零则不会:
as.logical(0:2)
# [1] FALSE TRUE TRUE
有趣的是,上面的许多解决方案都没有删除空/空白字符串:""
. 但是不容易找到简单的解决方案:L[L != ""]
.
总而言之,这里有一些从数组列表中删除不需要的项目的各种方法。
# Our Example List:
L <- list(1:3, "foo", "", character(0), integer(0))
# 1. Using the *purrr* package:
library(purrr)
compact(L)
# 2. Using the *Filter* function:
Filter(length, L)
# 3. Using *lengths* in a sub-array specification:
L[lengths(L) > 0]
# 4. Using *lapply* (with *length*) in a sub-array specification:
L[lapply(L,length)>0]
# 5. Using a sub-array specification:
L[L != ""]
# 6. Combine (3) & (5)
L[lengths(L) > 0 & L != ""]
用于lengths()
定义列表元素的长度:
l <- list(1:3, "foo", character(0), integer(0))
l[lengths(l) > 0L]
#> [[1]]
#> [1] 1 2 3
#>
#> [[2]]
#> [1] "foo"
#>