我之前已经问过将R Markdown转换为HTML的命令.
将R Markdown文件转换为PDF文档的好方法是什么?
一个好的解决方案将尽可能多地保留内容(例如,图像,方程式,html表等).解决方案需要能够从命令行运行.一个好的解决方案也是跨平台的,理想情况下最小化依赖关系,以便更容易共享makefile等等.
具体来说,有很多选择:
markdown在R中使用包,则指定哪些选项pandoc,R内置的包或其他东西R Markdown,Knitr,Pandoc和Bookdown的功能之间有什么关系?
具体来说,在将标记文档与嵌入式R代码(例如.Rnw或者.Rmd)转换为最终输出(例如.pdf或.html)时,这些包之间的"分工"是什么?如果Knitr用于处理RMarkdown,那么这个rmarkdown包做了什么以及它与它有何不同markdown package?
什么是命令行编织器相当于R CMD Sweave myfile.rnw?
在RStudio 中使用knit()/ knit2pdf()代替"编译PDF" 1按钮有什么(可能不需要的)副作用?
大多数用户knitr似乎都在RStudio中编写文档,并使用"编译PDF"/"编织HTML"按钮编译文档.这大部分时间都可以顺利运行,但每隔一段时间就有一些使用编译按钮无法实现的特殊要求.在这些情况下,解决方案通常是直接调用knit()/ knit2pdf()/ rmarkdown::render()(或类似函数).
一些例子:
使用knit2pdf()而不是"编译PDF"按钮通常提供这种问题的简单解决方案.然而,这是有代价的:"编译PDF" 在一个单独的过程和环境中处理文档有根本区别,而knit2pdf()朋友则不然.
这具有影响,问题在于并非所有这些影响都是显而易见的.以knit()使用全局环境中的对象的事实为例(而"编译PDF"没有)作为示例.在上述第二个例子的情况下,这可能是显而易见的,并且是期望的行为,但是当用于克服例如示例1和3中的问题时,这是意想不到的结果knit().
此外,还有更微妙的差异:
每当我读/写使用的建议knit2pdf()而不是"编译PDF"时,我认为"正确,但用户应该理解后果......".
因此,这里的问题是:
在RStudio 中使用
knit()/knit2pdf()代替"编译PDF"按钮有什么(可能不需要的)副作用?
如果对这个问题有一个全面的(社区维基?)答案,可以将其与未来的建议联系起来knit2pdf().
这个问题有很多相关的问题.然而,他们要么只提出代码(或多或少)重现RStudio按钮的行为,要么他们解释"基本上"发生了什么,而没有提到可能的陷阱.其他人看起来像是非常相似的问题,但结果却是一个(非常)特殊情况.一些例子:
我知道这个问题类似于这一个.但我无法在那里得到解决方案,所以再次在这里发布.
我希望通过单击"编织HTML"但通过命令获得与我得到的完全相同的输出.我尝试使用knit2html但它与格式混淆并且不包括标题,kable不起作用等.
例:
这是我的test.Rmd文件,
---
title: "test"
output: html_document
---
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
```{r} …Run Code Online (Sandbox Code Playgroud) 我想将"pander"功能设置为编译knitr rmarkdown文档时的替代"打印"功能.像这样(在R中运行的代码示例):
require(pander)
print <- function(...) pander(..., style = "rmarkdown") # makes sure that everyhing that everyprint will pass through pander
summary(cars)
Run Code Online (Sandbox Code Playgroud)
这将导致:
> summary(cars)
----------------------------------
speed dist
------ ------------ --------------
**** Min. : 4.0 Min. : 2.00
**** 1st Qu.:12.0 1st Qu.: 26.00
**** Median :15.0 Median : 36.00
**** Mean :15.4 Mean : 42.98
**** 3rd Qu.:19.0 3rd Qu.: 56.00
**** Max. :25.0 Max. :120.00
----------------------------------
Run Code Online (Sandbox Code Playgroud)
这样,我将使所有表格格式化,而不是手动需要在整个文档中写"pander"(想象我必须在文档中写"摘要(汽车)20次,更改"打印"将保存我写pander(摘要(汽车))).
那可能吗?(还是有一种我不知道的更聪明的方式?)
谢谢.
更新:.rmd文件的示例:
TEST
====
```{r}
require(pander)
print <- function(...) …Run Code Online (Sandbox Code Playgroud) 如何以独立于操作系统的方式从R打开本地html文件?
出于演示目的,假设文件已被调用test.html并且位于工作目录中.
system('gnome-open test.html')
browseURL(paste('file://', getwd(),'test.html', sep='/'))
我试图找出RStudio在按下RStudio版本0.98.1091中的"编织HTML"按钮时使用的命令和默认选项,因为当我knit()从控制台运行该函数时,我得到一个稍微不同的中间降价文件.
具体来说,当我对R markdown文件使用以下标题时:
---
title: "Report Title"
author: Daddy the Runner
date: "`r format(Sys.time(), '%A, %B %d, %Y')`"
output:
html_document:
keep_md: true
---
Run Code Online (Sandbox Code Playgroud)
按下"编织HTML"按钮时,我得到以下markdown文件:
# Report Title
Daddy the Runner
`r format(Sys.time(), '%A, %B %d, %Y')`
Run Code Online (Sandbox Code Playgroud)
当我执行以下命令:时knit("myReport.Rmd"),我得到以下markdown文件:
---
title: "Report Title"
author: Daddy the Runner
date: "Saturday, January 10, 2015"
output:
html_document:
keep_md: true
---
Run Code Online (Sandbox Code Playgroud)
显然,RStudio按钮正在使用其他一些选项生成中间降价文件,但我无法在RStudio文档中找到有关它的任何信息.
关键问题是日期线.出于某种原因,RStudio在制作markdown文件时不会在标题中执行内联r块.(但是,它会在生成最终HTML之前执行.)然而,knit()函数调用会在生成markdown文件时执行内联块.
我在两个降价文件中注意到的唯一其他差异与图的生成有关.这两种方法生成不同大小的图形(命令行:504 x 504)与(按钮:672 x 480)并将它们放在不同的目录中.
在Rstudio 0.96的R Markdown文件中按"Knit HTML"时,我尝试了这个命令的运行方式.问题是插入一个Sys.sleep(30)电话,但没有提供任何关于RStudio用来编织文档的信息.它确实暂停了R Markdown控制台窗口中的输出,这是不必要的,因为RStudio始终保留所有输出.我在输出中没有看到的是RStudio发出的命令.
任何洞察这些差异的性质将不胜感激.虽然我喜欢使用IDE环境和它们提供的便利,但我真的很想了解它们正在做什么,这样我就能更好地预测它们的行为.