gpt4 book ai didi

r - 将嵌套列表展平为 1-deep 列表

转载 作者:行者123 更新时间:2023-12-05 01:06:44 25 4
gpt4 key购买 nike

我正在寻找一种有效的解决方案来(递归地)将嵌套列表(任意深度)展平为非嵌套的 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 要么是 NAenquoteeval 的双循环也让事情变得有点慢。这个函数在我的代码中被广泛使用。有没有办法一次性完成所有操作?

最佳答案

更换 rapply部分由你自己的递归所以 NULL s 没有得到任何特殊待遇:

renquote <- function(l) if (is.list(l)) lapply(l, renquote) else enquote(l)

lapply(unlist(renquote(ml)), eval)

关于r - 将嵌套列表展平为 1-deep 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com