Spłaszcz zagnieżdżoną listę na 1-głęboką listę

Szukam skutecznego rozwiązania (rekurencyjnie) spłaszczenia zagnieżdżonej listy (o dowolnej głębi) do nie zagnieżdżonej, głębokiej listy. Elementy listy nie są jednorodne, dlatego nie powinny być umieszczane na liście w wektorze (co wymusiłoby wszystkie wartości do pojedynczego typu). Najlepszym rozwiązaniem do tej pory jest:

flatlist <- function(mylist){
    lapply(rapply(mylist, enquote, how="unlist"), eval)
}

To robi prawie to, co chcę:

> flatlist(list(foo=TRUE, bar=456, pets=list(cat="meeuw", dog="woof")))
$foo
[1] TRUE

$bar
[1] 456

$pets.cat
[1] "meeuw"

$pets.dog
[1] "woof"

Problemem jest jednak torapply upadaNULL wartości, które są niepożądane:

> flatlist(list(foo=123, bar=NULL))
$foo
[1] 123

chciałbymNULL elementy pojawiają się na wyjściu, jakoNULL lub jakNA. Również podwójna pętla zenquote i wtedyeval sprawia, że ​​rzeczy są nieco powolne. Ta funkcja jest szeroko używana w moim kodzie. Czy istnieje sposób, aby to zrobić w jednym biegu?

questionAnswers(1)

yourAnswerToTheQuestion