Determine level of nesting in R?

后端 未结 3 1793
既然无缘
既然无缘 2020-12-02 21:31

Is there an easy way (i.e. a function) to determine the level of nesting in list? I know there is str which can be used to get this information. But is there so

相关标签:
3条回答
  • 2020-12-02 21:47

    A little recursive function can do this for you:

    depth <- function(this,thisdepth=0){
      if(!is.list(this)){
        return(thisdepth)
      }else{
        return(max(unlist(lapply(this,depth,thisdepth=thisdepth+1))))    
      }
    }
    

    If you've got package:testthat, here's a test set:

    l1=list(1,2,3)
    l2=list(1,2,l1,4)
    l3=list(1,l1,l2,5)
    
    require(testthat)
    expect_equal(depth(l1),1)
    expect_equal(depth(l2),2)
    expect_equal(depth(l3),3)
    

    Apologies for using lower-case L in variable names. Readability fail.

    0 讨论(0)
  • 2020-12-02 21:50

    If all elements are named, you could use this (from the code of unlist):

    mylist <- list(a=list(x=1),b=list(c=list(y=c(2,3)),d=c("a","b")))
    names(.Internal(unlist(mylist, TRUE, TRUE)))
    #[1] "a.x"    "b.c.y1" "b.c.y2" "b.d1"   "b.d2" 
    
    0 讨论(0)
  • You can now use depth() from the purrr package!

    Note: currently the function is part of the development version of purrr but will become part of the official CRAN version once the package gets a version bump

    0 讨论(0)
提交回复
热议问题