zzz.R 607 Bytes
Newer Older
# Function to permute arrays of non-atomic elements (e.g. POSIXct)
.aperm2 <- function(x, new_order) {
  old_dims <- dim(x)
  attr_bk <- attributes(x)
  if ('dim' %in% names(attr_bk)) {
    attr_bk[['dim']] <- NULL
  }
  if (is.numeric(x)) {
    x <- aperm(x, new_order)
  } else {
    y <- array(1:length(x), dim = dim(x))
    y <- aperm(y, new_order)
    x <- x[as.vector(y)]
  }
  dim(x) <- old_dims[new_order]
nperez's avatar
nperez committed
  if (length(attr_bk) > 0) {
    if (names(attr_bk) == 'dimnames') {
      attr_bk <- list(dimnames = attr_bk$dimnames[new_order])
    } 
nperez's avatar
nperez committed
  }