File: collapse.R

package info (click to toggle)
r-cran-jsonlite 1.7.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,320 kB
  • sloc: ansic: 3,792; sh: 9; makefile: 2
file content (34 lines) | stat: -rw-r--r-- 1,090 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#' @useDynLib jsonlite C_collapse_array C_collapse_array_pretty_inner C_collapse_array_pretty_outer
collapse <- function(x, inner = TRUE, indent = 0L) {
  if(is.na(indent)){
    .Call(C_collapse_array, x)
  } else if(isTRUE(inner)){
    .Call(C_collapse_array_pretty_inner, x)
  } else {
    .Call(C_collapse_array_pretty_outer, x, indent)
  }
}

#' @useDynLib jsonlite C_row_collapse_array
row_collapse <- function(m, indent = NA_integer_){
  .Call(C_row_collapse_array, m, indent = indent)
}


# Iteratively collapse a high dimensional matrix / array
# Does not perform the final collapse, which is done in asJSON.array()
collapse_array <- function(x, columnmajor = FALSE, indent){
  # dimensionality of the array
  n <- length(dim(x))

  # Collapse the inner vectors
  dim <- 1:(n-1) + as.numeric(columnmajor)
  x <- apply(x, dim, collapse, inner = TRUE, indent = indent)

  # Collapse higher dimensions
  for(i in rev(seq_along(dim(x)))[-1]) {
    dim <- 1:(length(dim(x))-1) + as.numeric(columnmajor)
    x <- apply(x, dim, collapse, inner = FALSE, indent = indent + 2L * i)
  }
  x
}