在这场排版和数字运算共存的 Rnotebook 革命中,我的个人目标是将 R 文件与 latex 分开,尽可能少地受到 markdown 的污染,并且只以 R 注释的形式出现,例如javadoc
或甚至perlpod
。到目前为止,我已经成功地生成了可读的 R 报告,其中最少的 markdown 安全地限制在注释栏内。然后从 R cli 会话中可以执行以下操作:library(rmarkdown); render('afile.R')
。
现在我正在尝试用乳胶排版并用 R 进行处理。
但再次强调:尽量将 R 文件和 latex 文件分开。因此,不要遵循网上许多幼稚的例子(当文件增大时,最终会陷入困境):
\documentclass[12pt]{article}
\begin{document}
Hello I am latex
<<echo=F>>=
cat('and I am R and 1+1 is ', 1+1)
x1 <- runif(1000,1,2)
hist(x1,breaks=10)
@
\end{document}
理想情况下,我想这样做:
\documentclass[12pt]{article}
\begin{document}
Hello I am latex and following is my R script:
\input{crunch.R}
\end{document}
其中 crunch.R 是:
cat('and I am R and 1+1 is ', 1+1)
x1 <- runif(1000,1,2)
hist(x1,breaks=10)
不幸的是,这不起作用,因为输入没有包含在<<>>=
and中@
。
但这也不起作用crunch.R
(另外该文件不能被 R 正确处理):
<<>>=
cat('and I am R and 1+1 is ', 1+1)
x1 <- runif(1000,1,2)
hist(x1,breaks=10)
@
也不是这个乳胶文件:
\documentclass[12pt]{article}
\begin{document}
Hello I am latex and following is my R script:
<<>>=
\input{crunch.R}
@
\end{document}
原因很明显。
我需要的是一个特殊的\inputR{filename.R}
乳胶命令,它可以负责插入标签<<>>=
和@
。
知道在哪里可以找到这个命令或者如何编写它吗?
答案1
您可以使用加载外部块read_chunk
,然后稍后执行它们。这简化了源文档并允许您将代码保留在外部。请参阅代码外部化。
因此,假设您的 R 代码名为 Rcode.R
,其中有一个 R 注释行,其中包含要在文件中使用的代码的标签.Rnw
,在此示例中,标签为external-code
。它看起来像这样:
# ---- external-code ----
cat('and I am R and 1+1 is ', 1+1)
x1 <- runif(1000,1,2)
hist(x1,breaks=10)
现在我们有以下.Rnw
文件。请注意,这首先读取代码,然后单独执行。使用文件中定义的标签引用代码Rcode.R
。
\documentclass[12pt]{article}
\begin{document}
Hello I am latex
<<external-code, cache=FALSE,echo=F>>=
read_chunk('Rcode.R')
@
<<external-code,echo=F>>=
@
\end{document}
您将获得以下输出: