从多个列表中删除空值

4

我有一个包含SpatialPolygonsDataFrames的列表(A)。其中一些列表中有空值(表示没有SpatialPolygonsDataFrame)。我尝试过:

A[!sapply(unlist(A, recursive=FALSE), is.null)]

但是没有任何结果,然后我尝试了:
A_nonulls=lapply(A, na.omit)

如何从一个大列表中移除每个子列表的 null 值?

编辑:

我不能对 A 进行 str(A) 操作,因为 A 包含 1000 个列表,非常庞大。第一个列表的第一个元素可能如下:

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
class       : SpatialPolygons 
features    : 1 
extent      : 722951.5, 726848.9, 4325874, 4329654  (xmin, xmax, ymin, ymax)

所以我想要去除空值,只保留非空元素。

1
也许是 A[!vapply(A,is.null,TRUE)] - nicola
尼古拉,我已经尝试过了,但空值仍然存在于列表中。 - geo_dd
尝试使用Filter(Negate(is.null), A) - akrun
1
你必须更加具体。一些 NULL 消失了吗? 一些仍然存在吗?你有嵌套的列表吗?对于你提供的具体示例,我的代码行(就像 @akrun 的那个)是有效的。 - nicola
@akrun 谢谢,这对我有用! - geo_dd
@nicola,不知道为什么 A[!vapply(A,is.null,TRUE)] 对我不起作用。我会再试一次找出原因。 - geo_dd
3个回答

6

使用Hadley的优秀purrr包的另一个选项:

library(purrr)
compact(A)

1

你可以尝试这个

A[!sapply(A, is.null)]

1
我们可以尝试使用过滤器
Filter(Negate(is.null), A) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接