R 递归删除列表列表的空元素

R 递归删除列表列表的空元素,r,tidyverse,R,Tidyverse,我有一个命名列表,如下所示: x <- list(a=1, b=2, c=list(ca=1, cb=2, cc=NULL), d=NULL) 我想删除所有空元素,包括子列表中的元素。预期结果不包含x$d和x$c$cc 我尝试了purrr::compactx,但它只从最上面的列表中删除。来自的问题和答案也只适用于排名靠前的人 我尝试了rapplyx,purrr::compact,但它没有返回列表。一种方法是在基本rappy的rrapply包扩展中使用rrapply: 图书馆图书馆 x$a

我有一个命名列表,如下所示:

x <- list(a=1, b=2, c=list(ca=1, cb=2, cc=NULL), d=NULL)
我想删除所有空元素,包括子列表中的元素。预期结果不包含x$d和x$c$cc

我尝试了purrr::compactx,但它只从最上面的列表中删除。来自的问题和答案也只适用于排名靠前的人

我尝试了rapplyx,purrr::compact,但它没有返回列表。

一种方法是在基本rappy的rrapply包扩展中使用rrapply:

图书馆图书馆 x$a > [1] 1 > >b美元 > [1] 2 > >$c >$c$ca > [1] 1 > >$c$cb > [1] 2 基准时间

将rrapply的计算时间与rlist的list.clean函数进行基准测试,对于一些大型嵌套列表,我得到以下结果:

递归创建包含dmax层和50%NULL元素的嵌套列表 f表达式最小lq平均uq最大neval >rlist 2167.2946 2251.5203 2279.9963 2292.5045 2332.4432 2356.2188 5 >rrapply 268.9463 274.7437 325.9585 292.4559 354.1607 439.4857 5 一种方法是在基础RAPPY的rrapply包扩展中使用rrapply:

图书馆图书馆 x$a > [1] 1 > >b美元 > [1] 2 > >$c >$c$ca > [1] 1 > >$c$cb > [1] 2 基准时间

将rrapply的计算时间与rlist的list.clean函数进行基准测试,对于一些大型嵌套列表,我得到以下结果:

递归创建包含dmax层和50%NULL元素的嵌套列表 f表达式最小lq平均uq最大neval >rlist 2167.2946 2251.5203 2279.9963 2292.5045 2332.4432 2356.2188 5 >rrapply 268.9463 274.7437 325.9585 292.4559 354.1607 439.4857 5 您可以使用rlist::list.cleanx,recursive=TRUE。如果您研究源代码,就会看到递归是如何通过简单的lappy循环实现的。

您可以使用rlist::list.cleanx,recursive=TRUE。如果您研究源代码,就会看到递归是如何通过一个简单的lappy循环实现的