在从单独的 R 文件导入的 Latex 文件中执行 R 代码

在从单独的 R 文件导入的 Latex 文件中执行 R 代码

在这场排版和数字运算共存的 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}

您将获得以下输出:

代码输出

相关内容