58

命令行knitr相当于R CMD Sweave myfile.rnw什么?

4

4 回答 4

67

通用解决方案(不管 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"
于 2012-06-08T06:04:23.877 回答
24

我有一个 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.html是从test.Rhtmlif test.Rhtmlhas changed 中建立起来的。

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

现在跑题了……

于 2012-06-08T08:59:01.480 回答
4

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

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

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

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

于 2016-01-26T22:29:12.623 回答
2
R CMD knit file.Rmd

直接等价于 R CMD Sweave file.Rmd

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

R -e "library(rmarkdown); render(\"file.Rmd\")"
于 2015-01-29T01:09:11.823 回答