【问题标题】:What is the knitr equivalent of `R CMD Sweave myfile.rnw`?`R CMD Sweave myfile.rnw` 的 knitr 等价物是什么?
【发布时间】:2012-06-12 05:00:52
【问题描述】:

什么是命令行knitr 等效于R CMD Sweave myfile.rnw

【问题讨论】:

标签: r sweave knitr


【解决方案1】:

我有一个 knitme.R 脚本:

library(knitr)
render_html()
source("hooks.R") # mods to defaults
inFile = commandArgs(trailingOnly=TRUE)[1]
outFile = commandArgs(trailingOnly=TRUE)[2]
knit(inFile,output=outFile)

这样我就可以做

Rscript knitme.R $SOURCE $TARGET

$SOURCE$TARGET 是必需的。

您也可以将其集成到 Make 中,因此您有一个规则,您所要做的就是:

make myfile.html

它会转到myfile.Rhtml 并生成 HTML 文件。调整以从 .Rnw 制作 PDF

我将它与 SCons 一起使用而不是 Make,所以我有一个稍微复杂一点的 Sconscript 文件(部分原因是我才刚刚开始学习使用 SCons,所以可能有点笨拙)

env=Environment()
bld = Builder(action = '/usr/bin/Rscript knitme.R $SOURCE $TARGET',
              suffix='.html',
              src_suffix='Rhtml')
env.Append(BUILDERS = {'Knit' : bld})
env.Knit(source='test.Rhtml',target='test.html')

那么我需要做的就是:

scons test.html

如果test.Rhtml 发生变化,我会从test.Rhtml 得到test.html

这是 Sconstruct 文件的所有部分,该文件基于各种其他依赖项构建整个网站并将其复制到服务器。

现在跑题了……

【讨论】:

【解决方案2】:

要添加到其他答案,如果您想编织/渲染文件并在一行中打开输出,您可以使用:

Rscript -e "rmarkdown::render('file.Rmd')" & open file.pdf

我更喜欢在一行中完成所有操作,因为作为可重复使用的 Vim 命令运行更简单。

如果您想使用系统的非默认设置,也可以将open 替换为特定的应用程序。如果我在 Windows 上并且想要使用 Sumatra 覆盖当前打开的 PDF 输出,我倾向于使用它(所以我不必每次都记得关闭它)。

【讨论】:

【解决方案3】:
R CMD knit file.Rmd

直接相当于R CMD Sweave file.Rmd

最近在 rmarkdown 和 knitr 中有增强的功能来处理这种肮脏的工作。对于幻灯片,我一直使用 Rmarkdown YAML 标头来指定预期的输出格式,命令行是基本的,比如

R -e "library(rmarkdown); render(\"file.Rmd\")"

【讨论】:

    【解决方案4】:

    通用解决方案(无论 R 版本如何):

    Rscript -e "library(knitr); knit('myfile.Rmd')"
    

    从 R 3.1.0 开始,R CMD Sweave 开始支持非 Sweave 文档(虽然命令名称听起来有点奇怪),您唯一需要做的就是在文档中指定一个小插图引擎,例如

    %\VignetteEngine{knitr::knitr}
    

    要查看 knitr 中可能的小插图引擎,请使用

    library(knitr)
    library(tools)
    names(vignetteEngine(package = 'knitr'))
    # "knitr::rmarkdown" "knitr::knitr" "knitr::docco_classic" "knitr::docco_linear"
    

    【讨论】:

    • 该死...我本来打算发布的,但我想我会检查一下,看看是否有不那么俗气的选择...
    • 什么这么俗气?没有真正内置到 R 中,你不能做得更好。我的 Makefile 有 $(RSCRIPT) -e "library(knitr); knit(\"$*.Rnw\")"
    • 太棒了。在这个特定的例子中,我仍然使用 LaTeX,而不是 R Markdown,所以它是 Rscript -e "library(knitr); knit('myfile.rnw')"
    • 请注意,进行此更改后,我需要添加require(methods) 才能正确显示格子图;因为apparently Rscript doesn't load the methods package by default.
    • 请参阅stat.ethz.ch/pipermail/r-devel/2011-November/062704.html 了解有关R CMD foo 的讨论;不幸的是,来自 R 核心的响应是(几乎总是)你可以使用Rscript -e,这让我很困扰;我有一个shell脚本github.com/yihui/knitr/blob/master/inst/bin/knit,我在~/bin/下创建了一个符号链接,所以通常我只是在终端窗口中调用knit foo.Rnw(当然不适用于Windows...)
    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2010-10-09
    • 2011-01-07
    • 1970-01-01
    • 2023-01-17
    • 2012-06-16
    • 2022-01-09
    相关资源
    最近更新 更多