ネストされたリスト (任意の深さ) をネストされていない 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
要素が asNULL
または asとして出力に表示されることを望みNA
ます。enquote
また、 and thenを使用した二重ループによりeval
、処理が少し遅くなります。この関数は、私のコードで広く使用されています。1回の実行ですべてを実行する方法はありますか?