使用一个R Markdown文件,我想创建不同的可能的输出PDF文档,其中输出文件名应在文档中定义。有没有办法说服Markdown以这种方式操作输出文件名?理想情况下,我想通过r块传递文件名。
使用一个R Markdown文件,我想创建不同的可能的输出PDF文档,其中输出文件名应在文档中定义。有没有办法说服Markdown以这种方式操作输出文件名?理想情况下,我想通过r块传递文件名。
您可以使用未记录的knit
钩子重新定义RStudio Knit
按钮的功能(默认函数称为rmarkdown :: render
),以保持使用YAML标头的可重复性。 渲染函数的output_file
参数指定文件名,因此通过设置它,您可以覆盖使用与输入文件名相同的前缀的标准行为。
例如,始终输出名为myfile.pdf的文件。
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) })
这个函数可以是一个匿名的一行代码或者从一个包中导入,如这里所示并使用slidify。
你可以设置自己的YAML头信息(我不知道这是否被普遍建议),可以通过rmarkdown::metadata$newheader
进行访问,但我认为这种类型的函数内部似乎不可用。
至于从R块中传递文件名...如果您是指YAML头下面的代码块,根据我的经验,我认为这是不可能的(?)。头可以包含内联R命令(单引号括起来的,以r
开头),但似乎不适用于这种钩子函数。
相关:
output_file
rmarkdown::render(params=list(data="Oct2017data"),output_file="Oct2017_analysis.html")
,但显然我只想输入一次。 - StasK这基本上就是我所做的:
rmarkdown::render('my_markdown_report.Rmd',
output_file = paste('report.', Sys.Date(),
'.pdf', sep=''))
我有三个脚本 - 一个用于提取数据并进行处理,第二个为报告创建图表和表格。第三个根据Markdown文件创建报告。您在上面看到的代码是第三个脚本的一部分。
我在没有完全理解如何工作的情况下玩了一下Knitr-hook,并遇到了一个丑陋的解决方法。下面的代码似乎能做到这一点。 如果有人能解释为什么它起作用和/或是否可以写得更少丑陋,那就太好了。
目前我失去了闪亮的输入界面,但相信稍后甚至可以添加。好处是 R-Studio Knit 按钮仍然可以使用。
请注意,副标题和文件名都是:This Works!,即使带有空格和感叹号。该文件保存为 This Works!.pdf
通过将文本分配给对象 pSubTitle 来设置文件名和副标题。 请注意,params 仍然在 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. ....
我目前解决这个问题和类似问题的方案是通过两个脚本:
---
params:
feature_input: "XXXA"
date: "08/18/2022"
title: "`Test For `r params$feature_input``"
author: "You Name"
date: "`r params$date`"
output:
pdf_document:
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown and data process
```
#Get parameter from yaml head
input_para <- params$feature_input
input_para
```
featureNames <- c("aaa", "bbb", "ccc")
setwd("path to xxx.md")
for (currentFeature in featureNames) {
rmarkdown::render("xxx.Rmd",
params = list(feature_input = currentFeature,
date = Sys.Date()),
output_file=paste0("output/",currentFeature))
}
此解决方案使您能够:
paste0("file_",x,".pdf")?
这里的 x 可以是日期或数据集的名称。 - rmuc8