簡體   English   中英

將嵌套列表展平為1深列表

[英]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 還有帶enquoteeval的雙循環會讓事情變得有點慢。 此函數在我的代碼中廣泛使用。 有沒有辦法在一次運行中完成所有操作?

用您自己的遞歸替換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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM