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循环实现的