Command for exporting/saving table made with Formattable package in R

Laura D picture Laura D · Aug 8, 2016 · Viewed 8.4k times · Source

https://cran.r-project.org/web/packages/formattable/formattable.pdf

I've been using the Formattable package to make some nice looking tables in R. I'm trying to save the tables as images (or really any file format) but can't find a command that works. Using the jpeg/png function or dev.copy creates blank documents. Ideally I'd like to be able to save these tables in a loop. Does anyone know how this might be done?

data:

library(formattable)
DF <- data.frame(Ticker=c("", "", "", "IBM", "AAPL", "MSFT"),
                 Name=c("Dow Jones", "S&P 500", "Technology", 
                        "IBM", "Apple", "Microsoft"),
                 Value=accounting(c(15988.08, 1880.33, NA, 
                                    130.00, 97.05, 50.99)),
                 Change=percent(c(-0.0239, -0.0216, 0.021, 
                                  -0.0219, -0.0248, -0.0399)))

formattable(DF, list(
  Name=formatter(
    "span",
    style = x ~ ifelse(x == "Technology", 
                       style(font.weight = "bold"), NA)),
  Value = color_tile("white", "orange"),
  Change = formatter(
    "span",
    style = x ~ style(color = ifelse(x < 0 , "red", "green")),
    x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x)))
)

Answer

faaabyan picture faaabyan · Oct 20, 2016

To save you formattable you can use 'as.htmlwidget' and then printscreen it. First run the next function:

library("htmltools")
library("webshot")    

export_formattable <- function(f, file, width = "100%", height = NULL, 
                               background = "white", delay = 0.2)
    {
      w <- as.htmlwidget(f, width = width, height = height)
      path <- html_print(w, background = background, viewer = NULL)
      url <- paste0("file:///", gsub("\\\\", "/", normalizePath(path)))
      webshot(url,
              file = file,
              selector = ".formattable_widget",
              delay = delay)
    }

(source: https://github.com/renkun-ken/formattable/issues/26)

Then in your code assing the formattable to a variable and use the function to save it.

FT <- formattable(DF, list(
  Name=formatter("span", 
                 style = x ~ ifelse(x == "Technology", style(font.weight = "bold"), NA)), 
  Value = color_tile("white", "orange"), 
  Change = formatter("span", 
                     style = x ~ style(color = ifelse(x < 0 , "red", "green")), 
                     x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x))) )

export_formattable(FT,"FT.png")

Best regards.