I am writing a script and I want to output text messages to the console with different colors depending on conditions. For example: RED for errors and BLUE for warnings, etc.
I am using RStudio.
I am writing a script and I want to output text messages to the console with different colors depending on conditions. For example: RED for errors and BLUE for warnings, etc.
I am using RStudio.
On
The xterm256 package by Romain Francoise allows this sort of thing in general on any console that understands xterm256 interrupts.
On
Check out the new crayon package:
library(crayon)
cat(blue("Hello", "world!\n"))
More info on the GitHub page.
Works in RStudio 1.2.360+
On
On either Linux or Mac, you could try https://github.com/jalvesaq/colorout It doesn't work on Windows.
On
Actually, there IS a way without using R packages (Crayon and cli):
Use cat, paste0 and some ANSI hell to do it:
txt<-"rainbow"
for(col in 29:47){ cat(paste0("\033[0;", col, "m",txt,"\033[0m","\n"))}
You will need to do a bigger function, since cat is not very flexible, but this works well.
Obs: This solution was observed by a colleague, which is a perl stan.
On
Late to the game but building on @Pedro_S's answer here's an example of how could write functions to use ANSI colours to print coloured text based on plain text input of colours ("red", "green", etc.):
#' Convert plain text colour to ANSI code
#'
#' @param colour colour in plain text ("red", "green", etc.) to convert to ANSI
#'
#' @return string representing provided colour as ANSI encoding
#'
#' @examples
#' colour_to_ansi("red") # gives: "\033[31m"
colour_to_ansi <- function(colour) {
# Note ANSI colour codes
colour_codes <- list(
"black" = 30,
"red" = 31,
"green" = 32,
"yellow" = 33,
"blue" = 34,
"magenta" = 35,
"cyan" = 36,
"white" = 37
)
# Check colour provided in codes above
if (colour %in% names(colour_codes) == FALSE) {
stop(
paste0(
"Colour provided (", colour, ") can't be converted to ANSI. ",
"Must be one of: \n", paste(names(colour_codes), collapse = ",")
)
)
}
# Create ANSI version of colour
ansi_colour <- paste0("\033[", colour_codes[[colour]], "m")
return(ansi_colour)
}
#' Print (cat) progress text as coloured text
#'
#' @param text string to print using cat()
#' @param colour plain text colour ("red", "green", etc.). Defaults to "green"
#'
#' @examples
#' coloured_print("This is a test", colour = "blue")
coloured_print <- function(text, colour = "green") {
cat(colour_to_ansi(colour), text, "\033[0m\n")
}
Another option could be using the
insightpackage with theprint_colorfunction. You could also make the text bold or italic. Here is some reproducible code:Output RStudio: