Replacing the "print" function in knitr chunk evaluation

knitr, r, r-markdown

Solution

You need to selectively overrule the print method for the object class you want to print with pander. Do `methods(pander)` to figure out what is available. Some methods are not exported, so you will have to use `:::` to access them. Here is a simple example.

TEST
====

{r cache = F, comment = NA} print.lm <- pander:::pander.lm lm(mpg ~ wt, data = mtcars)

`

Output

TEST
====


r print.lm <- pander:::pander.lm lm(mpg ~ wt, data = mtcars)


-------------------------------------------------------------- &nbsp; Estimate Std. Error t value Pr(>|t|) ----------------- ---------- ------------ --------- ---------- **(Intercept)** 37.29 1.878 19.86 8.242e-19

**wt** -5.344 0.5591 -9.559 1.294e-10 --------------------------------------------------------------

Table: Fitting linear model: mpg ~ wt

`

Problem

I would like to set the "pander" function as an alternative "print" function for when compiling knitr rmarkdown documents. Like this (Example of code to run in R): ``` require(pander) print <- function(...) pander(..., style = "rmarkdown") # makes sure that everyhing that everyprint will pass through pander summary(cars) ``` This will result in: ``` > summary(cars) ---------------------------------- &nbsp; speed dist ------ ------------ -------------- **** Min. : 4.0 Min. : 2.00 **** 1st Qu.:12.0 1st Qu.: 26.00 **** Median :15.0 Median : 36.00 **** Mean :15.4 Mean : 42.98 **** 3rd Qu.:19.0 3rd Qu.: 56.00 **** Max. :25.0 Max. :120.00 ---------------------------------- ``` This way, I will get all of the tables well formatted, instead of manually needing to write "pander" all across the document (imagine I had to write "summary(car) 20 times in the document, changing "print" will save me writing pander(summary(car)) ). Is that possible? (or is there a smarter way I'm unaware of?) Thanks. Update: example for an .rmd file: ```` TEST ==== ```{r} require(pander) print <- function(...) pander(..., style = "rmarkdown") # makes sure that everyhing that everyprint will pass through pander summary(cars) ``` ```{r, eval=FALSE} library(knitr) knit2html("test.rmd") # http://stackoverflow.com/questions/10646665/how-to-convert-r-markdown-to-html-i-e-what-does-knit-html-do-in-rstudio-0-9 # http://quantifyingmemory.blogspot.co.il/2013/02/reproducible-research-with-r-knitr.html ``` ```` While the output test.md is: ```` TEST ==== ```r require(pander) print <- function(...) pander(..., style = "rmarkdown") # makes sure that everyhing that everyprint will pass through pander summary(cars) ``` ``` ## speed dist ## Min. : 4.0 Min. : 2 ## 1st Qu.:12.0 1st Qu.: 26 ## Median :15.0 Median : 36 ## Mean :15.4 Mean : 43 ## 3rd Qu.:19.0 3rd Qu.: 56 ## Max. :25.0 Max. :120 ``` ```r library(knitr) knit2html("test.rmd") # http://stackoverflow.com/questions/10646665/how-to-convert-r-markdown-to-html-i-e-what-does-knit-html-do-in-rstudio-0-9 # # http://quantifyingmemory.blogspot.co.il/2013/02/reproducible-research-with-r-knitr.html ``` ````

Original source

Related problems