如何将R Markdown转换为HTML?即,"Knit HTML"在 Rstudio 0.96 中做什么?



在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 调用了哪些命令。基本上他们是

  1. library(knitr); knit()获取降价文件;
  2. 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')"

这需要rmarkdowninstall.packages(rmarkdown)一起安装,并且安装了pandoc(显然它与Rstudio一起提供,有关更多详细信息,请参阅knutshell中的knitr(。

到目前为止,当我使用它时,它很好地将所有绘图放在HTML文件中,而不是作为图像放在图形目录中,并清理任何中间文件(如果有的话(;就像RStudio中的编译一样。

似乎你应该调用rmarkdown::render((而不是knitr::knit2html((,因为a.rmd似乎是一个R Markdown v2文档。

最新更新