2015-04-23 2 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) 

РЕДАКТИРОВАТЬ: Лучший вариант

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 = функция (х), если (длина (х)> 0) {lapply (х, Myf)} else {if (length (x) == 0) "" else x} 'и' lapply (nested_list, myf) ' – user1981275

+0

Спасибо, ребята! вызов функции внутри той же функции .. никогда не думал об этом :) – JHS

Смежные вопросы