gpt4 book ai didi

r - 在rapply中获取元素名称

转载 作者:行者123 更新时间:2023-12-01 17:28:14 24 4
gpt4 key购买 nike

很少使用的rapply函数应该是许多问题(例如this one)的完美解决方案。但是,它使用户编写的函数f无法知道它在树中的位置。

有什么方法可以通过f调用将嵌套列表中元素的名称传递给rapply?不幸的是,rapply很快调用了.Internal

最佳答案

最近,我在处理嵌套列表时遇到了任意深度。最终,我做出了或多或少可以接受的决定。这不是您问题的直接答案(无rapply用法),但它似乎正在解决相同类型的问题。希望对您有所帮助。

我没有尝试访问rapply中的列表元素的名称,而是生成了名称向量,并查询了元素的名称。

# Sample list with depth of 3
mylist <- list(a=-1, b=list(A=1,B=2), c=list(C=3,D=4, E=list(F=5,G=6)))

就我而言,生成名称向量是一个棘手的问题。具体来说,列表元素的名称应该是安全的,即没有 .符号。
list.names <- strsplit(names(unlist(mylist)), split=".", fixed=TRUE)
node.names <- sapply(list.names, function(x) paste(x, collapse="$"))
node.names <- paste("mylist", node.names, sep="$")
node.names

[1] "mylist$a" "mylist$b$A" "mylist$b$B" "mylist$c$C" "mylist$c$D" "mylist$c$E$F"
[7] "mylist$c$E$G"

下一步是按字符串名称访问列表元素。我发现没有什么比使用临时文件更好的了。
f <- function(x){
fname <- tempfile()
cat(x, file=fname)
source(fname)$value
}

这里 f仅返回 x的值,其中 x是具有list元素全名的字符串。

最后,我们可以以伪递归的方式查询列表。
sapply(node.names, f)

关于r - 在rapply中获取元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656030/

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