从 latex 运行 R 代码。(knitr 的替代品)

从 latex 运行 R 代码。(knitr 的替代品)

如果您想将 R 脚本的输出导出到 latex 并创建 pdf 文档,您可以使用 RStudio 中的 Knitr 包。但我想这只是为了获得短期结果而采取的良好做法。

如果我想写一本书、一篇 1000 页的论文该怎么办?

你该如何做相反的事情?

我的意思是,我可以在乳胶文件中包含 R 代码并直接从 TexStudio+LaTex/LuaTex 运行它吗?(为了在 pdf 中获取数值结果和图形)。

如何?

新功能:有人说可以使用 knitr 生成大型文档。即使可以,我认为从特定平台(如 TexStudio)创建 LaTex 文档更舒适、更灵活。

那么,最佳做法是什么?混合两种方法?:使用 Knitr 生成文档的各个部分,然后使用 TexStudio 进行混合和修改?怎么做?

有类似的包列表旨在正确显示代码但不能运行它。

答案1

在 ConTeXt 中,您可以使用筛选此类任务的模块。事实上,过滤器模块是 ConTeXt MkII 模块的泛化先生,它是专门为您的要求而设计的。

但是,使用过滤器模块可以轻松复制任何语言的功能,因此没有 MkIV 版本的先生

这是一个简单的例子:

\usemodule[filter]

\defineexternalfilter
  [R]
  [
     filtercommand={R CMD BATCH -q --save --restore \externalfilterinputfile\space \externalfilteroutputfile},
     output=\externalfilterbasefile.out,
     readcommand=\typefile,
     read=no,
     cache=yes,
   ]

\starttext
\startR
  ushape <- c(rexp(500000), 12-rexp(500000))
  pdf("ushape.pdf")
  par(mfrow=c(1,2))
  hist(ushape)
  plot(density(ushape), main="Density")
  dev.off()
\stopR

\startplacefigure[location=here, title={Output from R}]
  \externalfigure[ushape.pdf][height=0.5\textheight]
\stopplacefigure

\stoptext

这使

在此处输入图片描述

请注意,文件已被缓存,因此后续运行非常快。

答案2

但我猜这只是为了短期结果而采取的一种好做法。

我认为这是一个错误的前提。我从来没有写过 1000 页的书,但我写过几份统计报告,有些接近 100 页,只有两栏,只有几段 LaTeX 文本,但有几十张表格 (xtables)、几十种不同类型的图表和几十个统计结果,所有这些都是由 R 块在一个文件中生成的,存在与较短文档相同的问题。

有了这样的经验,对我来说,规则恰恰相反:文档越大,Sweave/knitr块的便利性就越高(使用 Rstudio、LyX 或 TeXworks,这不是问题)。

如果预览中的编译时间太长,请尝试使用cache=TRUEknitr考虑尽可能主要处理最终文档的子集。但是,我从来不需要这些解决方法,因为编译时间只够眼睛休息一下。

相关内容