R Markdown - 可变输出名称

时间:2015-02-13 12:53:18

标签: r markdown knitr r-markdown

使用一个R markdown文件,我想创建不同的输出pdf文档,其中输出文件名应在文档中定义。有没有办法说服markdown以这种方式操纵输出文件名?理想情况下,我想通过r块传递文件名。

4 个答案:

答案 0 :(得分:32)

通过使用未记录的Knit挂钩重新定义按钮的功能,可以保持使用RStudio knit按钮的简单性和YAML标头的可重现性(默认函数称为rmarkdown::render )。 render函数的output_file参数指定文件名,因此通过设置它可以覆盖使用与输入文件名相同的前缀的标准行为。

e.g。始终输出名为 myfile.pdf

的文件
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) })

该功能可以是匿名单行也可以从包中导入,如here slidify所示。

您可以设置自己的YAML标题(我不知道这是否通常是建议的),可以在rmarkdown::metadata$newheader下访问,但它们似乎无法在此类功能中使用我可以看到。

至于从R chunk传递文件名...如果您指的是YAML标题下方的代码块,根据我的经验,我认为不可能(?) 。标题可以包含内联R命令(单个反引号封装,以r开头),但似乎不适用于此挂钩函数。

相关

答案 1 :(得分:21)

这就是我的所作所为:

rmarkdown::render('my_markdown_report.Rmd',
                  output_file = paste('report.', Sys.Date(), 
                                      '.pdf', sep=''))

我有三个脚本 - 一个提取数据并处理它,第二个创建图表&报告表。第三个基于markdown文件创建报告。您在上面看到的代码是第三个脚本的一部分

答案 2 :(得分:4)

跟进@ilya所写的内容,这个网页有一个很好的例子,展示了他们所描述的内容,即如何从同一个.Rmd文档创建多个可重现的报告:

http://www.reed.edu/data-at-reed/software/R/markdown_multiple_reports.html

该网页使用两个脚本,一个R脚本和一个Rmarkdown脚本来创建多个报告。我已将它用作我自己工作的模板,并发现它非常有用。

答案 3 :(得分:0)

我目前为止最好的解决方法

see the complete story on stack

我在没有完全了解Knitr钩的工作原理的情况下玩了一下,然后遇到了一个丑陋的解决方法。下面的编码似乎可以解决问题。 如果有人可以解释它为什么起作用和/或它可以写得不太丑,那将是很好的。

现在我失去了闪亮的输入屏幕,但相信以后可以添加。好消息是R-Studio Knit按钮仍然可以使用。

请注意,字幕和文件名均为:此功能!,即使带有空格和感叹号也是如此。该文件另存为 This Works!.pdf

通过将文本分配给对象pSubTitle来设置文件名和字幕。 请注意,参数仍在YAML中,但不会在闪亮的弹出屏幕中显示,因为它们是在Knitr-hook中分配的

enter image description here

---
params: 
  sub_title:
    input: text
    label: Sub Title
    value: 'my_Sub_Title_and_File_Name'
title    : "Parameterized_Title_and_output_file"
subtitle : "`r params$sub_title`"
output:
  pdf_document:
    keep_tex: false
knit: (
  function(inputFile, encoding) { 

    pSubTitle <- 'This Works!'

    rmarkdown::render( 
      input       = inputFile, 
      encoding    = encoding, 
      params      = list(sub_title = pSubTitle),      
      output_file = pSubTitle) })
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## R Markdown

This is an R Markdown document. ....