--- title: "An Introduction to the printr Package" author: "Yihui Xie" date: "`r Sys.Date()`" slug: printr show_toc: yes githubEditURL: https://github.com/yihui/printr/edit/master/vignettes/printr.Rmd output: knitr:::html_vignette: number_sections: yes toc: yes vignette: > %\VignetteIndexEntry{An Introduction to the printr Package} %\VignetteEngine{knitr::rmarkdown} --- ```{r setup, include=FALSE} options(width = 80) ``` The **printr** (read "printer" or "print R") package is a companion package to [**knitr**](https://yihui.org/knitr/). Its main purpose is to extend the S3 generic function `knit_print()` in **knitr**, which is the default value of the chunk option `render`, as explained in the vignette [knit_print.html](https://cran.r-project.org/package=knitr/vignettes/knit_print.html). # Overview To enable the printing methods defined in this package, just `library(printr)` or `loadNamespace('printr')` in a code chunk (in the beginning) of your **knitr** document. Then some objects will be printed differently with what you would have seen in a normal R console. For example: - matrices, data frames, and contingency tables are printed as tables (LaTeX, HTML, or Markdown, depending on your output format) - the help page (from `?foo` or `help(foo)`) can be rendered as HTML, LaTeX, or plain text, and you can also specify which section(s) of the help page to include in the output - the results from `browseVignettes()`, `help.search()`, `data()`, and `vignette()` are rendered as tables - the package information from `library(help = 'foo')` is rendered as plain text To disable the printing methods in this package, you can call `detach('package:printr', unload = TRUE)` if you _attached_ the package via `library(printr)` before, or `unloadNamespace('printr')` if you _loaded_ it via `loadNamespace('printr')`. This package aims to be portable in the sense that it should work in most document formats, including `*.Rnw` (R + LaTeX), `*.Rmd` (R Markdown), and `*.Rhtml` (R + HTML) files, etc. You can find the package source as well as installation instructions on [Github](https://github.com/yihui/printr), and you are welcome to contribute code via pull requests, or file feature requests and bug reports via [Github issues](https://github.com/yihui/printr/issues). # Examples First we take a look at a quick example of printing some R objects in the R console: ```{r comment='', prompt=TRUE} # R uses plain text representation for data frames/matrices/... head(mtcars) head(iris) ``` Then we attach the **printr** package in this R session, and see how things change later: ```{r} library(printr) ``` ## Matrices/data frames/tables Matrices and data frames are printed as tables using the `kable()` function in **knitr**: ```{r warning=FALSE} options(digits = 4) set.seed(123) x = matrix(rnorm(40), 5) x # with colunm names dimnames(x) = list(NULL, head(LETTERS, ncol(x))) x # further customization via kable(), e.g. digits and captions knitr::kable(x, digits = 2, caption = 'A table produced by printr.') head(mtcars) head(iris, 10) ``` For contingency tables, 1-d tables are printed as a 1-row matrix, 2-d tables are printed an $n \times m$ matrix, and tables of higher dimensions are printed as data frames with frequencies. ```{r} x1 = sample(letters[1:3], 1000, TRUE) x2 = sample(letters[1:3], 1000, TRUE) x3 = sample(letters[1:3], 1000, TRUE) table(x1) table(x1, x2) table(x1, x2, x3) ``` ## Search results from `help.search()` Here are some examples demonstrating the results of `help.search()`, or you can also use `??` to search for a string. ```{r tidy=FALSE} ??sunflower help.search('contourplot') help.search('foo', package = 'base') help.search('foooooooo', package = 'utils') ``` In a normal R session, the results will be displayed as an HTML page by default, but normally these functions are meant to be called in an interactive R session, and **knitr** documents are often compiled in non-interactive R sessions, so we changed the printing behavior of these results, and readers will get the basic idea of these functions when reading the **knitr** output. If they want to run these functions by themselves, they can do it in an interactive R session. ## Help pages When you want to read the help page of a certain R object, you normally use `?` or `help()`, which will launch a separate help page from the R session, and require human interaction. Again, we may not desire human interactions in **knitr** documents, so the help pages are printed as static documents here. ```{r tidy=FALSE, comment=''} ?coef ``` When help pages are really long, we can use the chunk option `printr.help.sections` to select a few sections to display, e.g. we only show the sections `description` and `usage` of the `paste()` function: ```{r tidy=FALSE, printr.help.sections=c('description', 'usage'), comment=''} ?paste ``` ## Vignette/dataset lists We can print the lists of vignettes and datasets in packages using `vignette()` and `data()`, respectively. ```{r error=TRUE, purl=FALSE} vignette(package = 'rpart') vignette(package = c('rpart', 'knitr')) data(package = 'lattice') data(package = c('rpart', 'lattice')) data(package = 'knitr') # no datasets here browseVignettes(package = 'knitr') ``` ## Package info A description of a package can be printed via `library(help = 'foo')`: ```{r comment='', R.options=list(width=100)} library(help = 'printr') ```