view w4mcorcov_util.R @ 1:0c2ad44b6c9c draft

planemo upload for repository https://github.com/HegemanLab/w4mcorcov_galaxy_wrapper/tree/master commit 01d4a951cf09e7b88fcec96b8043bc7568cc5c92
author eschen42
date Sun, 22 Oct 2017 18:47:57 -0400
parents 23f9fad4edfc
children 50f60f94c034
line wrap: on
line source

# tryCatchFunc wraps an expression that produces a value if it does not stop:
#   tryCatchFunc produces a list
#   On success of expr(), tryCatchFunc produces
#     list(success TRUE, value = expr(), msg = "")
#   On failure of expr(), tryCatchFunc produces
#     list(success = FALSE, value = NA, msg = "the error message")
tryCatchFunc <- function(expr) {
  # format error for logging
  format_error <- function(e) {
    paste(c("Error { message:", e$message, ", call:", e$call, "}"), collapse = " ")
  }
  retval <- NULL
  tryCatch(
    expr = {
      retval <- ( list( success = TRUE, value = eval(expr = expr), msg = "" ) )
    }
    , error = function(e) {
      retval <<- list( success = FALSE, value = NA, msg = format_error(e) )
    }
  )
  return (retval)
}

# turn off all plotting devices
dev.off.all <- function() {
  while (!is.null(dev.list())) { dev.off() }
}
  
# capture plot and write to PDF; then close any devices opened in the process
plot2pdf <- function(
  file.name
, plot.function
, width = 12
, height = 12
) {
  # capture plot and write to PDF
  cur.dev <- dev.list()
  filename <- file.name
  pdf(file = filename, width = width, height = height)
  plot.function()
  # close any devices opened in the process
  dev.off()
  if (is.null(cur.dev)) {
      dev.off.all()
  } else {
      while ( length(dev.list()) > length(cur.dev) ) { dev.off() }
  }
}

# print and capture plot and write to PDF; then close any devices opened in the process
#   This is needed for ggplot which does not print the plot when invoked within a function.
print2pdf <- function(
  file.name
, plot.function
, width = 12
, height = 12
) {
  plot2pdf(
    file.name = file.name
  , width = width
  , height = height
  , plot.function = function() {
      print(plot.function())
    }
  )
}

iso8601.znow <- function()
{
  strftime(as.POSIXlt(Sys.time(), "UTC"), "%Y-%m-%dT%H:%M:%SZ")
}

# pdf.name <- function(name)
# {
#   paste0(name, "_", iso8601.filename.fragment(), ".pdf")
# }
#
# tsv.name <- function(name)
# {
#   paste0(name, "_", iso8601.filename.fragment(), ".tsv")
# }
#
# # pseudo-inverse - computational inverse non-square matrix a
# p.i <- function(a) {
#   solve(t(a) %*% a) %*% t(a)
# }