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

Ric*_*fer 42 r list

我怎样才能把包含零长度的成对列表为空表元素 character(0),integer(0)等等......

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

我不知道如何处理它们.我的意思是,如果NULL它更简单.如何删除这些元素,使其hsa:7476保留在列表中.

ags*_*udy 31

另一种选择(我认为更高效)通过保持元素长度> 0的索引:

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

[[1]]
[1] 1 2 3

[[2]]
[1] "foo"
Run Code Online (Sandbox Code Playgroud)


Jul*_*ora 27

一种可能的方法是

Filter(length, l)
# [[1]]
# [1] 1 2 3
# 
# [[2]]
# [1] "foo"
Run Code Online (Sandbox Code Playgroud)

哪里

l <- list(1:3, "foo", character(0), integer(0))
Run Code Online (Sandbox Code Playgroud)

这个工程由于这样的事实,正整数得到强制为TRUE通过Filter,因此,被保留,而零不:

as.logical(0:2)
# [1] FALSE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

  • +1,我总是忘记`过滤器`.你也可以`过滤(函数(x)!相同(字符(0),x),l)`如果你只想检查`字符(0)` (2认同)

luk*_*keA 9

为了完整起见,来自流行的tidyversepurrr包具有一些用于处理列表的有用功能 - (介绍)也可以使用magrittr的管道工作:compact%>%

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

要么

list(1:3, "foo", character(0), integer(0)) %>% compact
Run Code Online (Sandbox Code Playgroud)


Art*_*sov 8

使用lengths()定义列表元素的长度:

l <- list(1:3, "foo", character(0), integer(0))
l[lengths(l) > 0L]
#> [[1]]
#> [1] 1 2 3
#> 
#> [[2]]
#> [1] "foo"
#> 
Run Code Online (Sandbox Code Playgroud)


not*_*bit 5

有趣的是,上述许多解决方案都没有删除空字符串/ :""。但是,不容易找到简单的解决方案: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 != ""]
Run Code Online (Sandbox Code Playgroud)