gpt4 book ai didi

r - 追加到任意嵌套列表

转载 作者:行者123 更新时间:2023-12-01 19:33:10 25 4
gpt4 key购买 nike

我有一个嵌套的列表结构,我将其用作类的基础。每个类对象可以包含另一个类对象的实例,该实例将用于链接一系列命令。我正在尝试重载 + 运算符,以便能够迭代地构建命令集合。这需要找到“最深”的命令并附加到它。这就是我运气不佳的地方。

# an aribitrarily nested list
tmp <- list(x = list(x = list(x = list())))

# find deepest 'x'
last.x <- function(e) {
while(!is.null(e$x)){
e <- e$x
}
return(e)
}

# I need to be able to append to the deepest 'x' in the list. Ideally:
last.x(tmp)$x <- list()

这会产生错误:

Error in last.x(tmp)[["x"]] <- list() : 
could not find function "last.x<-"

我正在寻找的是某种通过引用访问“最深”x 并向其附加子项的方法。

最佳答案

如果从 R 中的数据结构中提取一些值,然后更改提取的对象,这不会影响原始数据结构(即提取的对象不会像指向原始数据的指针一样工作)。例如,考虑从鸢尾花数据集中复制物种,然后更改提取的值:

species <- iris$Species
species[1] <- "virginica"
species[1]
# [1] virginica
# Levels: setosa versicolor virginica
iris$Species[1]
# [1] setosa
# Levels: setosa versicolor virginica

但是,您仍然可以通过构造一个新的嵌套列表并将子级添加到最低级别来完成您想要做的事情。这是一种使用递归函数来完成此操作的方法:

tmp
# $x
# $x$x
# $x$x$x
# list()

rec <- function(x) {
if (is.null(x$x)) return(list(x=list()))
else return(list(x=rec(x$x)))
}
rec(tmp)
# $x
# $x$x
# $x$x$x
# $x$x$x$x
# list()

关于r - 追加到任意嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26783939/

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