在Rstudio 0.96中按R Markdown文件上的"Knit HTML"时会运行哪些命令?
我的动机是,当我在另一个文本编辑环境中时,我可能想运行相同的命令,或者我可能想将该命令组合在一个更大的makefile
中。
基本脚本
因此,现在 R markdown
包已经发布,这里有一些代码来复制 Knit 到 HTML 的功能。
require(knitr) # required for knitting from rmd to md
require(markdown) # required for md to html
knit('test.rmd', 'test.md') # creates md file
markdownToHTML('test.md', 'test.html') # creates html file
browseURL(paste('file://', file.path(getwd(),'test.html'), sep='')) # open file in browser
其中test.rmd
是 R 降价文件的名称。请注意,我对 browseURL 行不是 100% 有信心(因此我在这里问关于在 Web 浏览器中打开文件的问题(。
markdown到HTML选项
markdownToHTML
的好处是,在如何创建HTML方面有很多选项(请参阅?markdownHTMLOptions
(。例如,如果您只想要一个没有所有标头信息的代码片段,则可以编写:
markdownToHTML('test.md', 'test.html', options='fragment_only')
或者,如果您不喜欢硬换行(即,当 Markdown 源中存在单个手动换行符时插入换行符(,您可以省略"hard_wrap"选项。
# The default options are 'hard_wrap', 'use_xhtml',
# 'smartypants', and 'base64_images'.
markdownToHTML('test.md', 'test.html',
options=c('use_xhtml', 'base64_images'))
生成文件
这也都可以添加到一个 makefile 中,也许可以使用 Rscript -e
(例如,像这样的东西(。这是我放在一起的一个基本示例makefile,其中test
表示rmd文件称为test.rmd
。
RMDFILE=test
html :
Rscript -e "require(knitr); require(markdown); knit('$(RMDFILE).rmd', '$(RMDFILE).md'); markdownToHTML('$(RMDFILE).md', '$(RMDFILE).html', options=c('use_xhtml', 'base64_images')); browseURL(paste('file://', file.path(getwd(),'$(RMDFILE).html'), sep=''))"
makefile使用我首选的降价选项:即options=c('use_xhtml', 'base64_images')
把Sys.sleep(30)
放在一个块中,你会清楚地看到 RStudio 调用了哪些命令。基本上他们是
-
library(knitr); knit()
获取降价文件; - RStudio 具有将降价转换为 HTML 的内部函数;
第二步将在下一版本的降价包中更加透明。目前,您可以使用knitr::knit2html('your_file.Rmd')
来获取与RStudio类似的HTML文件。
2019/
09/17更新:上述答案适用于RStudio v0.96(2012年(。现在 R Markdown 是通过 rmarkdown::render()
编译的,它使用 Pandoc 而不是退役的 R 包 markdown。有关更多详细信息,请参阅R Markdown,Knitr,Pandoc和Bookdown之间的关系。
命令行方法,来自 knitr in a knutshell:
R -e "rmarkdown::render('knitr_example.Rmd')"
这需要rmarkdown
与install.packages(rmarkdown)
一起安装,并且安装了pandoc(显然它与Rstudio一起提供,有关更多详细信息,请参阅knutshell中的knitr(。
到目前为止,当我使用它时,它很好地将所有绘图放在HTML文件中,而不是作为图像放在图形目录中,并清理任何中间文件(如果有的话(;就像RStudio中的编译一样。
似乎你应该调用rmarkdown::render((而不是knitr::knit2html((,因为a.rmd似乎是一个R Markdown v2文档。