题 什么是`R CMD Sweave myfile.rnw`的编织器等价物?


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


55
2018-06-08 05:53


起源


stackoverflow.com/a/10969107/563329 - isomorphismes


答案:


一般解决方案(无论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"

63
2018-06-08 06:04



该死的......我打算发帖,但我想我会检查一下,看看是否有一个不那么俗气的替代品...... - Dason
什么这么俗气?如果没有真正内置到R中,你就无法做得更好。我的Makefiles有 $(RSCRIPT) -e "library(knitr); knit(\"$*.Rnw\")" - Ben Bolker
辉煌。在这个特殊的例子中,我仍然使用LaTeX,而不是R Markdown,所以它是 Rscript -e "library(knitr); knit('myfile.rnw')" - Jeromy Anglim
请注意,进行此更改后,我需要添加 require(methods) 为了使格子图正确显示;因为 显然Rscript默认不加载方法包。 - Jeromy Anglim
看到 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 ...) - Yihui Xie


我有一个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.Rhtml 如果 test.Rhtml 已经改变。

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

现在离题了......


23
2018-06-08 08:59



我还不能让它与SConstruct一起工作。我喜欢,喜欢的东西 tex.stackexchange.com/a/26573/8272 - Nikos Alexandris


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

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

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

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


3
2018-01-26 22:29



将其添加为一个构建器 SConstruct 文件。看到: stackoverflow.com/a/38806488/1172302。 - Nikos Alexandris


R CMD knit file.Rmd

是直接等效于R CMD Sweave file.Rmd

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

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

2
2018-01-29 01:09