[英]Flatten nested list into 1-deep list
我正在尋找一種有效的解決方案(遞歸地)將嵌套列表(任意深度)展平為非嵌套的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
的雙循環會讓事情變得有點慢。 此函數在我的代碼中廣泛使用。 有沒有辦法在一次運行中完成所有操作?
用您自己的遞歸替換rapply
部分,因此NULL
沒有得到任何特殊處理:
renquote <- function(l) if (is.list(l)) lapply(l, renquote) else enquote(l)
lapply(unlist(renquote(ml)), eval)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.