在R中循环嵌套列表

7

我有一个嵌套15层的巨大列表。我需要将出现在任何层次上的空列表替换为“chr”。“我尝试使用lapply循环遍历该列表,但它并没有起作用。有没有更简单的方法来做到这一点?

nested_list<-list(a=list(x=list(),y=list(i=list(),j=list(p=list(),q=list()))),b=list())

lapply(nested_list,function(x) if(length(x)==0) "" else x)
仅应用于第一层级,如何递归循环整个嵌套列表并执行此操作?
1个回答

12

尝试以下递归。

foo <- function(l){
    lapply(l, function(x) if(length(x)==0) "" else foo(x))
}
foo(nested_list)

编辑:更好的版本

foo <- function(l){
    lapply(l, function(x) if(is.list(x) && length(x)==0) "" else if(is.list(x)) foo(x) else x)
}

类似但是方向相反的代码是:myf = function(x) if (length(x)>0){lapply(x, myf)} else {if(length(x)==0) "" else x}以及lapply(nested_list, myf) - user1981275
谢谢大家!在同一个函数内调用函数...从未想过 :) - JHS

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