怎么把R Markdown转换成HTML?即,Rstudio 0.96中的“编织HTML”是做什么的?


70

在Rstudio 0.96中的R Markdown文件上按“编织HTML”时,运行什么命令?

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


1
我实际上不确定,但是我怀疑是结合使用knit从R Markdown转换为Markdown,然后使用pandoc之类的格式转换为html。也许RStudio正在将其转换为html。但是pandoc非常易于使用,可以轻松地添加到makefile中。
戴森2012年

2
我将标题略微更新为“如何将R Markdown转换为HTML”,并将RStudio放在标题的末尾,因为人们可能更喜欢使用“如何将R Markdown转换为html”。
Jeromy Anglim 2012年

Answers:


42

Sys.sleep(30)一块,您将清楚地看到RStudio调用了哪些命令。基本上是

  1. library(knitr); knit() 获取降价文件;
  2. RStudio具有将markdown转换为HTML的内部功能;

降价软件包的下一版本中,第二步将更加透明。目前,您可以knitr::knit2html('your_file.Rmd')用来获取RStudio提供的类似HTML文件。


2019年9月17日更新:以上答案适用于RStudio v0.96(2012年)。现在R Markdown是通过编译的rmarkdown::render(),它使用Pandoc而不是退休的R包markdown。有关更多详细信息请参见R Markdown,Knitr,Pandoc和Bookdown之间关系


2
我有一个示例,该示例knit2html("Report.Rmd", encoding='ISO8859-1')不会产生与knit按钮相同的html:使用时存在编码问题knit2html。但是,当我按下“编织”按钮时,确实可以在日志中看到ISO8859-1encoding选项。因此,该差异应在mdhtml转换。编织按钮真的有用markdownToHTML吗?
斯特凡·洛朗

我认为这里应该提到规范的答案rmarkdown::render(),这就是我到达此页面的方式,并且解决了我的问题
MichaelChirico

@MichaelChirico你是正确的。这个答案写于2012年,当时rmarkdown软件包尚未诞生(rmarkdown是我所说的“ markdown软件包的下一版本”的意思)。请随时编辑我的答案。谢谢!
Yihui Xie

我想了!我本来可以编辑它,但我想让它留给您如何使其最适合解决问题的方法/与方法的区别knitrrmarkdown因为我不太确定自己是否会公正对待(我今天才学到了如何做到这一点毕竟!)
MichaelChirico19年

63

基本脚本

因此,既然Rmarkdown包已经发布,这里有一些代码将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.rmdR markdown文件的名称在哪里。请注意,我对BrowseURL行不是100%的自信(因此,我的问题是在网络浏览器中打开文件)。

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(例如,类似于)将其全部添加到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使用我首选的markdown选项: options=c('use_xhtml', 'base64_images')


4
现在的答案是给出options(rstudio.markdownToHTML=... rstudio.com/ide/docs/authoring/markdown_custom_rendering
斯特凡洛朗

2
现在,knitr似乎不再使用markdownToHTML,而是使用rmarkdown :: render(),请参阅此处的注释:rforge.net/doc/packages/knitr/knit2html.html
RobinL

28

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

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

这需要rmarkdown安装install.packages(rmarkdown)并已安装pandoc(显然,它是Rstudio随附的,有关更多详细信息,请参阅knutr中的knitr)。

到目前为止,当我使用它时,它可以很好地将所有绘图都放置在HTML文件中,而不是将图像显示在图形目录中,并清理所有中间文件(如果有);就像在RStudio中进行编译一样。


1
+1!它与bash命令相结合find,就可以实际呈现的RMD文件整个目录结构(例如,对于有许多演示/教程的课程)find . -name '*Rmd' -exec R -e "rmarkdown::render('{}')" \; > /dev/null
Paul Hiemstra,2015年

用反斜杠转义内部引号是否有用?
哈里

4

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.