2015-04-23 167 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