gpt4 book ai didi

r - 检查列表是否嵌套

转载 作者:行者123 更新时间:2023-12-04 22:21:53 26 4
gpt4 key购买 nike

是否存在“内置”/高效且健壮的方法来检查列表对象是否嵌套?

为了阐明我对嵌套一词的理解:

平面或非嵌套列表

x.1 <- list(
a=TRUE,
b=1:5
)

嵌套列表
x.2 <- list(
a=list(a.1=list(a.1.1=TRUE)),
b=list(b.1=1:5)
)

我的第一个想法是结合使用 strcapture.output和正则表达式。但是,由于一切都与正则表达式有关:功能强大,健壮性方面也很冒险;-)所以我想知道是否还有更好的东西:
isNested <- function(x) {
if (class(x) != "list") {
stop("Expecting 'x' to be a list")
}
out <- FALSE
strout <- capture.output(str(x))
idx <- grep("\\$.*List", strout)
if (length(idx)) {
out <- TRUE
}
return(out)
}

> isNested(x=x.1)
[1] FALSE
> isNested(x=x.2)
[1] TRUE

第二种方法由Roman和Arun提供:
isNested2 <- function(x) {
if (class(x) != "list") {
stop("Expecting 'x' to be a list")
}
out <- any(sapply(x, is.list))
return(out)
}

> isNested2(x=x.1)
[1] FALSE
> isNested2(x=x.2)
[1] TRUE

最佳答案

您可以使用is.list函数:

any(sapply(x.1, is.list))
[1] FALSE

any(sapply(x.2, is.list))
[1] TRUE

作为函数 isNested:
isNested <- function(l) {
stopifnot(is.list(l))
for (i in l) {
if (is.list(i)) return(TRUE)
}
return(FALSE)
}

该功能会在检测到嵌套列表后立即停止,而不是测试所有列表元素。

关于r - 检查列表是否嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382142/

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