2015-04-23 101 views
4

我有一个巨大的15层的嵌套列表。我需要用chr“”替换出现在任何级别的空列表。我尝试了一下循环遍历列表,但它不工作。有没有简单的方法来做到这一点?循环嵌套列表中的R

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) 

lapply仅适用于第一级,我如何递归地循环整个嵌套列表并执行此操作?

回答

7

请尝试以下递归。

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

EDIT:一个更好的版本

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

相似,但周围的其他方法:'了Myf =函数(x)如果(长度(X)> 0){lapply(X,了Myf )} else {if(length(x)== 0)“”else x}“和'lapply(nested_list,myf)' – user1981275

+0

谢谢你们!在相同的函数内调用函数..从来没有想过的:) – JHS