cast_dim2flat

Cast Dimensional List into a Flattened List

Description

cast_dim2flat() casts a dimensional list (i.e. recursive array) into a flat list (i.e. recursive vector), but with names that indicate the original dimensional positions of the elements.

Primary purpose for this function is to facilitate printing or summarizing dimensional lists.

Usage

cast_dim2flat(x, ...)

## Default S3 method:
cast_dim2flat(x, ...)

Arguments

x a list
further arguments passed to or from methods.

Value

A flattened list, with names that indicate the original dimensional positions of the elements.

See Also

broadcast_casting

Examples

library("broadcast")


x <- array(
  sample(list(letters, month.name, 1:10 ~ "foo"), prod(4:2), TRUE),
  dim = 4:2,
  dimnames = list(NULL, LETTERS[1:3], c("x", "y"))
)


# summarizing ====
summary(x) # dimensional information is lost
##       Length Class   Mode     
##  [1,] 26     -none-  character
##  [2,] 26     -none-  character
##  [3,]  3     formula call     
##  [4,]  3     formula call     
##  [5,] 12     -none-  character
##  [6,] 26     -none-  character
##  [7,] 26     -none-  character
##  [8,] 26     -none-  character
##  [9,]  3     formula call     
## [10,] 12     -none-  character
## [11,]  3     formula call     
## [12,]  3     formula call     
## [13,]  3     formula call     
## [14,]  3     formula call     
## [15,] 26     -none-  character
## [16,] 12     -none-  character
## [17,] 12     -none-  character
## [18,] 12     -none-  character
## [19,] 12     -none-  character
## [20,]  3     formula call     
## [21,] 26     -none-  character
## [22,]  3     formula call     
## [23,] 12     -none-  character
## [24,] 26     -none-  character

# In the following instances, dimensional position info is retained:
cast_dim2flat(x) |> summary()
##               Length Class   Mode     
## [1, 'A', 'x'] 26     -none-  character
## [2, 'A', 'x'] 26     -none-  character
## [3, 'A', 'x']  3     formula call     
## [4, 'A', 'x']  3     formula call     
## [1, 'B', 'x'] 12     -none-  character
## [2, 'B', 'x'] 26     -none-  character
## [3, 'B', 'x'] 26     -none-  character
## [4, 'B', 'x'] 26     -none-  character
## [1, 'C', 'x']  3     formula call     
## [2, 'C', 'x'] 12     -none-  character
## [3, 'C', 'x']  3     formula call     
## [4, 'C', 'x']  3     formula call     
## [1, 'A', 'y']  3     formula call     
## [2, 'A', 'y']  3     formula call     
## [3, 'A', 'y'] 26     -none-  character
## [4, 'A', 'y'] 12     -none-  character
## [1, 'B', 'y'] 12     -none-  character
## [2, 'B', 'y'] 12     -none-  character
## [3, 'B', 'y'] 12     -none-  character
## [4, 'B', 'y']  3     formula call     
## [1, 'C', 'y'] 26     -none-  character
## [2, 'C', 'y']  3     formula call     
## [3, 'C', 'y'] 12     -none-  character
## [4, 'C', 'y'] 26     -none-  character

cast_dim2flat(x[1:3, 1:2, 2, drop = FALSE]) |> summary()
##               Length Class   Mode     
## [1, 'A', 'y']  3     formula call     
## [2, 'A', 'y']  3     formula call     
## [3, 'A', 'y'] 26     -none-  character
## [1, 'B', 'y'] 12     -none-  character
## [2, 'B', 'y'] 12     -none-  character
## [3, 'B', 'y'] 12     -none-  character

cast_dim2flat(x[1:3, 1:2, 2, drop = TRUE]) |> summary()
##          Length Class   Mode     
## [1, 'A']  3     formula call     
## [2, 'A']  3     formula call     
## [3, 'A'] 26     -none-  character
## [1, 'B'] 12     -none-  character
## [2, 'B'] 12     -none-  character
## [3, 'B'] 12     -none-  character


# printing ====
print(x) # too compact
## , , x
## 
##      A            B            C           
## [1,] character,26 character,12 1:10 ~ "foo"
## [2,] character,26 character,26 character,12
## [3,] 1:10 ~ "foo" character,26 1:10 ~ "foo"
## [4,] 1:10 ~ "foo" character,26 1:10 ~ "foo"
## 
## , , y
## 
##      A            B            C           
## [1,] 1:10 ~ "foo" character,12 character,26
## [2,] 1:10 ~ "foo" character,12 1:10 ~ "foo"
## [3,] character,26 character,12 character,12
## [4,] character,12 1:10 ~ "foo" character,26
cast_dim2flat(x) |> print() # much less compact
## $`[1, 'A', 'x']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[2, 'A', 'x']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[3, 'A', 'x']`
## 1:10 ~ "foo"
## 
## $`[4, 'A', 'x']`
## 1:10 ~ "foo"
## 
## $`[1, 'B', 'x']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[2, 'B', 'x']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[3, 'B', 'x']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[4, 'B', 'x']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[1, 'C', 'x']`
## 1:10 ~ "foo"
## 
## $`[2, 'C', 'x']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[3, 'C', 'x']`
## 1:10 ~ "foo"
## 
## $`[4, 'C', 'x']`
## 1:10 ~ "foo"
## 
## $`[1, 'A', 'y']`
## 1:10 ~ "foo"
## 
## $`[2, 'A', 'y']`
## 1:10 ~ "foo"
## 
## $`[3, 'A', 'y']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[4, 'A', 'y']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[1, 'B', 'y']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[2, 'B', 'y']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[3, 'B', 'y']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[4, 'B', 'y']`
## 1:10 ~ "foo"
## 
## $`[1, 'C', 'y']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
## 
## $`[2, 'C', 'y']`
## 1:10 ~ "foo"
## 
## $`[3, 'C', 'y']`
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $`[4, 'C', 'y']`
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"