dropnests

Drop Redundant List Nesting

Description

dropnests() drops redundant nesting of a list.
It is the hierarchical equivalent to the dimensional base::drop() function.

Usage

dropnests(x, ...)

## Default S3 method:
dropnests(x, maxdepth = 32L, recurse_classed = FALSE, ...)

Arguments

x a list
further arguments passed to or from methods.

maxdepth a single, positive integer, giving the maximum depth to recurse into the list.
The surface-level elements of a list is depth 1.
dropnests(x, maxdepth = 1) will return x unchanged.
recurse_classed TRUE or FALSE, indicating if the function should also recurse through classed lists within x, like data.frames.

Value

A list without redundant nesting.
Attributes are preserved.

Examples

library("broadcast")


x <- list(
  a = list(list(list(list(1:10)))),
  b = list(1:10)
)
print(x)
## $a
## $a[[1]]
## $a[[1]][[1]]
## $a[[1]][[1]][[1]]
## $a[[1]][[1]][[1]][[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## 
## 
## 
## 
## $b
## $b[[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10


dropnests(x)
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $b
##  [1]  1  2  3  4  5  6  7  8  9 10


# recurse_classed demonstration ====
x <- list(
  a = list(list(list(list(1:10)))),
  b = data.frame(month.abb, month.name),
  c = data.frame(month.abb)
)


dropnests(x) # by default, recurse_classed = FALSE
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $b
##    month.abb month.name
## 1        Jan    January
## 2        Feb   February
## 3        Mar      March
## 4        Apr      April
## 5        May        May
## 6        Jun       June
## 7        Jul       July
## 8        Aug     August
## 9        Sep  September
## 10       Oct    October
## 11       Nov   November
## 12       Dec   December
## 
## $c
##    month.abb
## 1        Jan
## 2        Feb
## 3        Mar
## 4        Apr
## 5        May
## 6        Jun
## 7        Jul
## 8        Aug
## 9        Sep
## 10       Oct
## 11       Nov
## 12       Dec

dropnests(x, recurse_classed = TRUE)
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $b
##    month.abb month.name
## 1        Jan    January
## 2        Feb   February
## 3        Mar      March
## 4        Apr      April
## 5        May        May
## 6        Jun       June
## 7        Jul       July
## 8        Aug     August
## 9        Sep  September
## 10       Oct    October
## 11       Nov   November
## 12       Dec   December
## 
## $c
##  [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"


# maxdepth demonstration ====
x <- list(
  a = list(list(list(list(1:10)))),
  b = list(1:10)
)
print(x)
## $a
## $a[[1]]
## $a[[1]][[1]]
## $a[[1]][[1]][[1]]
## $a[[1]][[1]][[1]][[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## 
## 
## 
## 
## $b
## $b[[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10


dropnests(x) # by default, maxdepth = 32
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $b
##  [1]  1  2  3  4  5  6  7  8  9 10

dropnests(x, maxdepth = 3L)
## $a
## $a[[1]]
## $a[[1]][[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## 
## 
## $b
##  [1]  1  2  3  4  5  6  7  8  9 10

dropnests(x, maxdepth = 1L) # returns `x` unchanged
## $a
## $a[[1]]
## $a[[1]][[1]]
## $a[[1]][[1]][[1]]
## $a[[1]][[1]][[1]][[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## 
## 
## 
## 
## $b
## $b[[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10