I am wondering if there is an easy way to create a bunch of tables or graphics with variable headers in knitr . The only way I know is: (simplified from https://github.com/yihui/knitr-examples/blob/master/075-knit-expand.Rnw ). But you need to drag the output to src and then print it after the loop, because I want to write a function to create such a loop from an arbitrary data set.
\documentclass{article} \title{Using knit\_expand() for templates} \author{Yihui Xie} \begin{document} \maketitle \tableofcontents <<lm-mtcars, tidy.opts=list(width.cutoff=55)>>= # the template tpl = c("\\subsection{Regression on {{xvar}}}", "<<lm-{{xvar}}>>=", "lm(mpg~{{xvar}}, data=mtcars)", "@") # expand to knitr source and pass to knit() src = lapply(names(mtcars)[-1], function(xvar) {knit_expand(text = tpl)}) @ \Sexpr{knit(text = unlist(src))} \end{document}
So what I want to do is something like this:
\documentclass{article} \title{Using knit\_expand() for templates} \author{Yihui Xie} \begin{document} \maketitle \tableofcontents <<lm, tidy.opts=list(width.cutoff=55)>>= myLfFun=function(dataset){ ... some function definition which produces say an lm for each variable in dataset ... } @ \Sexpr{myLfFun(Titanic} ... \Sexpr{myLfFun(mtcars} ... etc \end{document}
... What if I run brew (), this will create ...
\documentclass{article} \title{Brew + knitR} \author{Ramnath Vaidyanathan} \begin{document} \maketitle \tableofcontents <<lm-cyl >>= lm(mpg ~ cyl, data = mtcars) @ <<lm-disp >>= lm(mpg ~ disp, data = mtcars) @ <<lm-hp >>= lm(mpg ~ hp, data = mtcars) @ <<lm-drat >>= lm(mpg ~ drat, data = mtcars) @ <<lm-wt >>= lm(mpg ~ wt, data = mtcars) @ <<lm-qsec >>= lm(mpg ~ qsec, data = mtcars) @ <<lm-vs >>= lm(mpg ~ vs, data = mtcars) @ <<lm-am >>= lm(mpg ~ am, data = mtcars) @ <<lm-gear >>= lm(mpg ~ gear, data = mtcars) @ <<lm-carb >>= lm(mpg ~ carb, data = mtcars) @ ((... same for Titanic database ...)) \end{document}
... and the output of this I could then knit2pdf (). Therefore, if the template was called tmpl.Rnw, I would do brew ('tmpl.Rnw', 'doc.Rnw'); knit2pdf ('doc.Rnw)