knitr:forloop条件有没有办法包括Sexpr?

时间:2013-02-04 05:13:49

标签: r latex knitr

我正在使用R中的knitr包来尝试将数据帧转换为报表。 问题是输入数据存在很多变化。目的是打印一行文本(从数据框中提取,然后是图表,也从数据框中提取)

以下代码是相同的简化版本。它不输出aby PDF文件。

\documentclass{report}
\usepackage{forloop}
\newcounter{tmp}

\begin{document}
\newcommand{\Brep}{$\Sexpr{A}$}

\forloop{tmp}{1}{\value{tmp} < \Brep} {\Brep}

\end{document}

在检查日志和删除部分时,我已将其缩小为knitr / latex,无法评估forloop条件下的\ FBrep部分。

有没有办法解决这个问题? 此外,在下一步中,我将需要以类似的方式使用includegraphics,如下所示

\includegraphics{\Brep.PNG}

很抱歉,如果这是RTFM材料。我真的很新,我确实环顾四周。 感谢

1 个答案:

答案 0 :(得分:2)

您不能让LaTeX致电knitrRknitr所做的是解析您的R代码文档,并评估代码。然后一切都完全在R方面完成,你得到一个静态的LaTeX输出文件,它与R无关。所以如果你想编程任何东西,可以用R代码

将您的计划直接翻译为R:

\documentclass{report}
\begin{document}

<<results='asis', echo=FALSE>>=
for (tmp in 1:A) {
  cat(tmp)
}
@

<<results='asis', echo=FALSE>>=
for (tmp in 1:A) {
  cat(sprintf('\\includegraphics{%d.PNG}', tmp))
}
@
\end{document}

但它可以简化为:

\documentclass{report}
\begin{document}
\Sexpr{paste(1:A, collapse = '')}
\Sexpr{paste(sprintf('\\includegraphics{%d.PNG}', 1:A), collapse = '')}
\end{document}

我还需要提醒您,这可能不是在您的文档中插入图表的理想方法(通常您不需要处理\includegraphics{})。您需要了解这样的自动化:

\documentclass{report}
\begin{document}
<<>>=
for (i in 1:5) {
  hist(mtcars[, i])
}
@
\end{document}