如何将R Markdown转换为HTML?即,“编织HTML”在R96 0.96中做了什么?

时间:2012-05-18 04:20:31

标签: r rstudio knitr r-markdown

在Rstudio 0.96的R Markdown文件中按“编织HTML”时会运行哪些命令?

我的动机是,当我在另一个文本编辑环境中时,我可能想要运行相同的命令,或者我可能想要在更大的makefile中组合命令。

4 个答案:

答案 0 :(得分:62)

基本脚本

现在是R markdown package has been released,这里有一些代码可以将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%的信心(因此我的问题是关于opening files in a web browser)。

markdownToHTML选项

关于markdownToHTML的好处是,HTML的创建方式有很多选项(参见?markdownHTMLOptions)。因此,例如,如果您只想要一个没有所有标题信息的代码片段,您可以写:

markdownToHTML('test.md', 'test.html', options='fragment_only')

或者如果你不喜欢硬包装(即在降价源中有单个手动换行符时插入换行符),你可以省略'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'))

生成文件

也可以使用Rscript -e(例如something like this)将其全部添加到makefile中。这是我放在一起的基本示例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')

答案 1 :(得分:39)

Sys.sleep(30)放入一个块中,您将清楚地看到RStudio调用的命令。基本上他们是

  1. library(knitr); knit()获取降价文件;
  2. RStudio具有将markdown转换为HTML的内部函数;
  3. 第二步将在下一版markdown包中更加透明。目前,您可以使用knitr::knit2html('your_file.Rmd')获取与RStudio相同的HTML文件。

答案 2 :(得分:26)

来自knitr in a knutshell的非常简单的命令行方法:

R -e "rmarkdown::render('knitr_example.Rmd')"

这需要rmarkdown安装install.packages(rmarkdown)并安装pandoc(显然它附带Rstudio,有关详细信息,请参阅knitr in a knutshell。)

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

答案 3 :(得分:1)

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