R 从具有字符(0)的列表中删除空元素
如何从包含零长度pairlist as的列表中删除空元素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,
字符(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