我想知道是否有一種簡單的方法在knitr
中生成一串帶有可變字幕的表格或圖形。我知道的唯一方法是:(從https://github.com/yihui/knitr-examples/blob/master/075-knit-expand.Rnw簡化)。但是這是一個拖動,將輸出收集到src
中,然後在循環後打印它,因爲我想編寫一個函數來從任意數據集中生成這樣的循環。有針織字幕的循環
\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}
所以我希望能夠做的卻是這樣的:它會產生
\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}
...這,如果我跑了BREW()...
\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}
...和這個我可以然後knit2pdf()的輸出。所以如果模板名爲tmpl.Rnw,我會運行brew('tmpl.Rnw','doc.Rnw'); knit2pdf('doc.Rnw)
我不明白你在問什麼 - 你想要「變量表/圖標題」還是「任意數據集的循環」?在這個例子中,你並不侷限於'mtcars'。 –
謝謝。我想「一個任意數據集的函數」 - 這將包括一個循環,並會爲每個變量添加適當的標題。我從事調查研究,所以我經常有非常廣泛的數據集,每個數據集都包含相關變量塊,這些變量都需要以類似方式處理(顯示塊中每個變量的直方圖和表格等)。我認爲這是針對knitr的常見用例? –