Свести вложенный список в 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
делает вещи немного медленными Эта функция широко используется в моем коде. Есть ли способ сделать все это за один раз?