是否有一個「內置」/有效和健壯的方式來檢查列表對象是否嵌套?檢查一個列表是否嵌套
爲了澄清我的術語的理解嵌套:
平或不嵌套列表
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)
)
我的第一個想法是使用的組合,capture.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
第二條本辦法禮貌羅馬和阿倫的:
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
如果您是第一個訂單清單,如果班級是清單,該怎麼辦?如果是的話,它是嵌套的,否則不是。 (任何(sapply(x.2,function(x)class(x)==「list」))''的行。 'any(sapply(x.1,function(x)class(x)==「list」))'返回FALSE。 – 2013-03-13 10:06:33
'any(sapply(my_list,class)==「list」)' – Arun 2013-03-13 10:07:54
好吧,那會更容易;-)謝謝你們!作爲第二種方法嵌入您的方法。歡呼 – Rappster 2013-03-13 10:10:57