R/cat_function.R

Defines functions cat_function

Documented in cat_function

#' Prints function snippet to console and clipboard
#'
#' @param FUN function
#' @param add.equal.sign add equal sign to add arguments
#' @param print print function snippet to console
#' @param copy2clipboard copy function snippet to clipboard
#'
#' @return
#' @export
#'
#'
cat_function <- function(FUN, add.equal.sign = T, print = T, copy2clipboard = T) {

  #
  if (!hasArg(FUN) || !is.function(FUN)) return(FALSE)



  FUN.str <- deparse(args(FUN))

  # Remove last element of vector
  FUN.str <- FUN.str[FUN.str != "NULL"]


  # Collapse vector to one string
  FUN.str <-  paste(FUN.str, collapse = "")

  # Catch function name
  name <- deparse(substitute(FUN))

  FUN.str <- gsub(pattern = "function ",
                  replacement = name,
                  x = FUN.str)

  # Remove double spaces
  while (nchar(FUN.str) != nchar(gsub(pattern = "  ",
                                      replacement = " ",
                                      x = FUN.str))) {
    FUN.str <- gsub(pattern = "  ",
                    replacement = " ",
                    x = FUN.str)
  }


  # Separate arguments
  FUN.str <- unlist(strsplit(FUN.str, split = ", "))


  # Add = sign
  if (add.equal.sign) {

    for (i in setdiff(which(!grepl("=", FUN.str)), length(FUN.str))) {

      FUN.str[i] <- paste0(FUN.str[i], " = ")

    }

    # Modify last argument if no default is given
    if (!grepl("=", FUN.str[length(FUN.str)])) {
      FUN.str[length(FUN.str)] <-
        paste0(substring(FUN.str[length(FUN.str)],
                         1,
                         nchar(FUN.str[length(FUN.str)]) - 2),
               " = ",
               substring(FUN.str[length(FUN.str)],
                         nchar(FUN.str[length(FUN.str)]) - 1))
    }

  }


  # Combine arguments with linebreaks and tabs
  FUN.str <- paste(FUN.str, collapse = ", \n\t")


  # Copy to clipboard
  if (copy2clipboard) {
    cat(FUN.str, file = "clipboard")
  }

  # print to console
  if (print) {
    cat(FUN.str)
  }


  return(invisible(FUN.str))

}
nicohuttmann/pOmics documentation built on Sept. 21, 2022, 9:28 a.m.