使用一个R markdown文件,我想创建不同的输出pdf文档,其中输出文件名应在文档中定义。有没有办法说服markdown以这种方式操纵输出文件名?理想情况下,我想通过r块传递文件名。
答案 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
开头),但似乎不适用于此挂钩函数。
相关强>:
output_file
knit:
hook /对应GitHub wiki notes 答案 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中分配的
---
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. ....