R 从具有字符(0)的列表中删除空元素

R 从具有字符(0)的列表中删除空元素,r,list,R,List,如何从包含零长度pairlist as的列表中删除空元素 字符(0),整数(0)等 list2 # $`hsa:7476` # [1] "1","2","3" # # $`hsa:656` # character(0) # # $`hsa:7475` # character(0) # # $`hsa:7472` # character(0) 我不知道如何对付他们。我的意思是,如果NULL则更简单。如何删除这些元素,使列表中只保留hsa:7476。一种可能的方法是 Filter(length,

如何从包含零长度pairlist as的列表中删除空元素
字符(0)
整数(0)

list2
# $`hsa:7476`
# [1] "1","2","3"
# 
# $`hsa:656`
# character(0)
#
# $`hsa:7475`
# character(0)
#
# $`hsa:7472`
# character(0)

我不知道如何对付他们。我的意思是,如果
NULL
则更简单。如何删除这些元素,使列表中只保留
hsa:7476

一种可能的方法是

Filter(length, l)
# [[1]]
# [1] 1 2 3
# 
# [[2]]
# [1] "foo"
在哪里

另一个选择(我认为更有效)是在元素长度>0的地方保留索引:

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

[[1]]
[1] 1 2 3

[[2]]
[1] "foo"
使用
length()
定义列表元素的长度:

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

为了完整起见,来自popular的软件包有一些有用的函数用于处理列表-
compact
()也可以实现这一点,并且可以很好地处理magrittr的
%%
管道:

l <- list(1:3, "foo", character(0), integer(0))
library(purrr)
compact(l)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] "foo"

有趣的是,上面的许多解决方案都没有删除空/空字符串:
”。但是不容易找到简单的解决方案:
L[L!=“”]

总而言之,这里有几种从数组列表中删除不需要的项的方法

#我们的示例列表:
L 0]
# 4. 在子阵列规范中使用*lappy*(带*length*):
L[lappy(L,长度)>0]
# 5. 使用子阵列规范:
L[L!=“”]
# 6. 联合收割机(3)和(5)
L[长度(L)>0&L!='']

+1,我总是忘记
过滤器
。如果您只想检查
字符(0)
的话,也可以执行
过滤(函数(x)!相同(字符(0),x),l)
,这很好,因为它允许在一行中完成子集!
length
方法首先需要一个
l
来执行
l[长度(l)>0]
。我可以在创建子集的过程中应用它。我想知道
L[length(L)>0L]
句子中的
L
是什么意思?强制整数类型。从
?length
:存在
length(x)
的一个理由是它是
sapply(x,length)的更有效版本
和类似的
*将
调用应用于
length
l <- list(1:3, "foo", character(0), integer(0))
l[lengths(l) > 0L]
#> [[1]]
#> [1] 1 2 3
#> 
#> [[2]]
#> [1] "foo"
#> 
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