CommunityData:Knitr

From CommunityData

Knitr is a package that allows you to import dataframes from R and dynamically generate LaTeX tables in your paper. Using knitr is good practice for times when you're working on a paper and make a slight change to your analysis, and need to update every instance where you've reported results.

Preparation

First, you'd want to create an R script that's organized around every table you want to create in your document. The script should create separate dataframes for every one of them. If your table is going to have rownames, include a vector of rownames in your data frame.

A data frame for a summary stats table could look something like this, for instance (assuming you've loaded your data in a dataframe called d):

summary.stats <- data.frame(cbind(
                             c("Var 1", "Var 2", "Var 3"),
                             c(min(d$var.1), min(d$var.2), min(d$var.3)),
                             c(median(d$var.1), median(d$var.2), median(d$var.3)),
                             c(max(d$var.1), max(d$var.2), max(d$quality.score))
                                                 ))


Finally, append each table dataframe to a list (i.e. results$summary.stats <- summary.stats), and save this list as an .Rdata file. You'd probably also want to store your entire dataset in the results list (i.e. as results$d ).

Latex Preamble

Save the .Rdata file in the same folder as your tex document. Now, include a preamble like this in your tex file (by all your \usepackage commands):

<<init, echo=FALSE, message=FALSE>>=
knit_hooks$set(document = function(x) {
 sub('\\usepackage[]{color}',
'\\usepackage[usenames,dvipsnames]{color}', x, fixed = TRUE)
})
@

Now, after your \begin{document} command, import your dataset and necessary R packages. You'll need xtable for generating LaTeX tables from Rdata files and ggplot2 for charts and diagrams.

 <<import, echo=FALSE, message=FALSE>>=
 library(xtable)
 library(ggplot2)
 bold <- function(x) {paste('{\\textbf{',x,'}}', sep =)}
 gray <- function(x) {paste('{\\textcolor{gray}{',x,'}}', sep =)}
 wrapify <- function (x) {paste("{", x, "}", sep="")}
 f <- function (x) {formatC(x, format="d", big.mark=',')}
 load("my_data.RData")
 attach(results)
 @

Documentation