Свести вложенный список в 1-глубокий список

Я ищу эффективное решение (рекурсивно) сплющить вложенный список (произвольной глубины) в не вложенный, 1 глубокий список. Элементы списка не являются однородными, поэтому они не должны быть перечислены в векторе (который приведет все значения к одному типу). Лучшее решение на данный момент это:

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

Это делает почти то, что я хочу:

> 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"

Однако проблема в том, чтоrapply падаетNULL значения, которые нежелательны:

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

Я бы этого хотелNULL элементы появляются в выводе, либо какNULL или какNA, Также двойная петля сenquote а потомeval делает вещи немного медленными Эта функция широко используется в моем коде. Есть ли способ сделать все это за один раз?

Ответы на вопрос(1)

Ваш ответ на вопрос