Tal Galili Tal Galili - 9 days ago 5
R Question

Replacing the "print" function in knitr chunk evaluation

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
```

Answer

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
```
Comments