我经常使用Sweave生成 LaTeX 文档,其中某些块是通过执行 R 代码动态生成的。这很好用——但是否也可以有以不同方式执行的代码块,例如通过在 shell 中执行代码,或通过运行 Perl 等等?能够混合起来会很有帮助,所以我可以做一些事情,比如运行一些 shell 命令来获取一些数据,运行一些 perl 命令来预处理它,然后运行 R 命令来分析它。
当然,我可以使用所有 R 块并system()
用作穷人的替代品,但这并不能使文档中的阅读变得非常愉快。
新事物(用于多语言、多格式)文档可能是dexy.it,例如 opengamma.org 的这些人将其用作后端。
dexy 背后的Ana也对此进行了很多讨论,所以也请查看dexy 博客。
它与 Sweave 没有直接关系,但是org-babel是 Emacs org-mode的一部分,它允许在一个文件中混合不同语言的代码块,将数据从一个块传递到另一个块,执行它们,并生成 LaTeX 或 HTML 导出从输出。
您可以在此处找到有关 org-mode 的更多信息:
看看 org-babel 是如何工作的:
除了通过 R 的外语接口(如果支持的话,可能通过)inline
或system()
. 对于它的价值,我只会使用system()
; 这应该很容易。
您可以看到有关为 Python 提供 Sweave 等效项的上一个问题,其中一位受访者实际上创建了一个单独的接口。这可以让您了解嵌入可能尚不支持的其他语言需要什么。至少,您必须对 Sweave 驱动程序进行重大修改。
有一个 StatWeave 项目,它使用 java 而不是 R 来进行编织,但会运行多个程序而不仅仅是 R。我不知道让它来做 Perl 或其他类似的程序有多难,但是homepage 表明它已经适用于 R、SAS、Stata 和其他: