我正在寻找一种有效的解决方案来(递归地)将嵌套列表(任意深度)展平为非嵌套的 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
我希望元素以 as或 asNULL
出现在输出中。还有双循环,然后让事情变得有点慢。这个函数在我的代码中被广泛使用。有没有办法一次性完成所有操作?NULL
NA
enquote
eval