Achatar lista aninhada em lista de 1 profundidade
Eu estou procurando uma solução eficiente para (recursivamente) achatar uma lista aninhada (de profundidade arbitrária) em 1 lista profunda não aninhada. Os elementos da lista não são homogêneos, portanto eles não devem ser não listados em um vetor (que coagiria todos os valores para um único tipo). A melhor solução até agora é:
flatlist <- function(mylist){
lapply(rapply(mylist, enquote, how="unlist"), eval)
}
Isso faz quase o que eu quero:
> 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"
No entanto, um problema é querapply
está caindoNULL
valores, o que é indesejado:
> flatlist(list(foo=123, bar=NULL))
$foo
[1] 123
Eu gostaria dissoNULL
elementos aparecem na saída, comoNULL
ou comoNA
. Também o laço duplo comenquote
e depoiseval
torna as coisas um pouco lentas. Essa função é usada extensivamente no meu código. Existe uma maneira de fazer tudo de uma só vez?