Dynamic and Reproducible Report Using R

Mahbubul Majumder, PhD
Sep 4, 2014

How do we prepare report?

  • Is that how you prepare data analysis report? report-making
  • What if we have to do it again and again
  • What if the data changes or part of the data changes
  • What if we can do everything from one place

How can we do this from R?

  • Wonderful R package knitr
  install.packages("knitr")
  library("knitr")
  • Install the package only once, but you have to include it every time you start R
  • Its free

Prepare the environment

  • Install R
  • Install LaTeX
  • Install RStudio
  • Configure RStudio by going to the menu

configure1

  • Change Weave Rnw files using' to knitr configure2

Creating a Sweave (.Rnw) file

  • Open a new R Sweave file to start

  • The new file will start with a complete template

  • You can compile the file from RStudio tool bar

  • You can create HTML, or markdown documents for your blog or your personal web site

open-rnw-file

R code chunk

  • The syntax of embedding R codes is
<<>>=
..... your R codes here ....
@
  • If you don't want to show your R code
<<echo=FALSE>>=
..... your R codes here ....
@
  • You can embed inline R code using \Sexpr{}

  • To view your document click on the compile pdf toolbar

Including a table

  • Use function kable() to display a table of data
  • Please try ? kable to learn more about the format, digits and row names
  • Don't forget to put option results='asis'
<<eval=TRUE,  results='asis'>>=
library(knitr)
x <- head(mtcars)
kable(x,format = 'html', caption='Few records of mtcars')
@
Few records of mtcars
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1

Including a fancy table

  • In latex \usepackage{booktabs}
  • Use kable(x,format = "latex", booktabs = TRUE)
<<eval=TRUE,  results='asis'>>=
library(knitr)
x <- head(mtcars)
kable(x,format = 'latex', booktabs = TRUE)
@
  • For more flexibility install.packages("xtable")
<<results ='asis'>>=
library(xtable)
x <- head(mtcars)
print(
  xtable(x,digits=2,
       caption ='has $\\alpha$ character', label = 'summary-data'), size='small',
  caption.placement = getOption('xtable.caption.placement', 'top')
  )
@

Figures and references

<<my-plot, fig.cap='My caption', fig.width=4, fig.height=4, fig.align='center',fig.pos='hbtp',out.width='.45\\linewidth'>>= 
plot(women)
@

plot of chunk unnamed-chunk-9

  • Refer your figure from the text by saying \ref{fig:my-plot}

Reading assignment and references