R/wrangle.R

toMat <- function(x){
  if(NCOL(x)>1 && !is.matrix(x)){
    x <- matrix(x,ncol=NCOL(x))
  }
  return(x)
}

#Converts arguments into data.frame, whilst retaining mts/ts/matrix properties
datamat <- function(..., flatten=TRUE, functions=TRUE){
  vars <- list(...)
  if(length(vars)==0){
    return(data.frame())
  }
  if(!is.null(names(vars))){
    names(vars)[!nzchar(names(vars))] <- as.character(substitute(list(...))[-1])[!nzchar(names(vars))]
  }
  else{
    names(vars) <- as.character(substitute(list(...))[-1])
  }
  if(flatten){
    i <- 1
    while (i <= length(vars)){
      if (is.data.frame(vars[[i]])){
        vars <- c(vars,c(vars[[i]])) #Append data.frame components
        vars[[i]] <- NULL #Remove data.frame
      }
      else if (is.matrix(vars[[i]])){
        for (j in 1:NCOL(vars[[i]])){
          vars[[length(vars)+1]] <- vars[[i]][,j]
          names(vars)[length(vars)] <- make.names(colnames(vars[[i]])[j])
        }
        i <- i + 1
      }
      else{
        i <- i + 1
      }
    }
  }
  class(vars) <- "data.frame"
  row.names(vars) <- 1:max(sapply(vars, NROW))
  #   if(is.ts(vars[,1])){
  #     if(NCOL(vars)>1){
  #       class(vars) <- c(class(vars),"mts")
  #     }
  #     class(vars) <- c(class(vars),"ts")
  #     tspx <- unique(sapply(vars,tsp), MARGIN = 2)
  #     if(length(tspx)==3){
  #       attr(vars, "tsp") <- tspx
  #     }
  #   }
  return(vars)
}

recoverTSP <- function(times.x){
  freq <- sort(unique(round(times.x%%1,digits=6))) #The subset cannot increase frequency
  freq <- length(freq)
  return(c(min(times.x),min(times.x)+(length(times.x)-1)/freq,freq))
}
pli2016/forecast documentation built on May 25, 2019, 8:22 a.m.