YAML当前date在rmarkdown

我想知道是否有一个把当前date放在YAML文件的前端,由knitrrmarkdown包处理的rmarkdown 。 我曾经在我的维基页面的顶部有以下行,

  _baptiste, `r format(Sys.time(), "%d %B, %Y")`_ 

它会在html输出中转换为baptiste,20145月3日 。 现在,我想利用由rmarkdown提供的高级pandoc包装器,但是在YAML头文件中使用r代码似乎不起作用:

 --- title: "Sample Document" output: html_document: toc: true theme: united date: `r format(Sys.time(), "%d %B, %Y")` author: baptiste --- Error in yaml::yaml.load(front_matter) : Scanner error: while scanning for the next token at line 6, column 7 found character that cannot start any token at line 6, column 7 Calls: <Anonymous> ... output_format_from_yaml_front_matter -> parse_yaml_front_matter -> <Anonymous> -> .Call 

任何解决方法?

这有点棘手,但你只需要通过引用内联Rexpression式来使YAML中的date字段有效,例如

 date: "`r format(Sys.time(), '%d %B, %Y')`" 

那么parsing错误将会消失,并且在降价输出中会生成date,所以Pandoc可以使用Sys.time()的值。

只要跟着@易辉 奇怪的是,我发现:

 '`r format(Sys.Date(), "%B %d, %Y")`' 

比以下工作更好:

 "`r format(Sys.Date(), '%B %d, %Y')`" 

对于后者,RStudioselect将外部引号更改为'每当在HTML和PDF输出之间切换并因此破坏代码”。

一个解决方法是使用brew包并将您的YAML前端作为brew模板写入。

 --- title: "Sample Document" output: html_document: toc: true theme: united date: <%= format(Sys.time(), "%d %B, %Y") %> author: baptiste --- 

您现在可以使用brew_n_render函数来使用brew预处理文档,然后通过rmarkdown运行。

 brew_n_render <- function(input, ...){ output_file <- gsub("\\.[R|r]md$", ".html", input) brew::brew(input, 'temp.Rmd'); on.exit(unlink('temp.Rmd')) rmarkdown::render('temp.Rmd', output_file = output_file) } 

要使用RStudio中的KnitHTMLbutton进行操作,可以编写自定义输出格式,该格式将自动使用brew作为预处理器。 使用brew进行预处理可确保文档中的编码代码块在预处理阶段不受影响。 理想情况下, rmarkdown包应该在其API中公开元数据,并允许用户通过自定义函数运行它。

或者只是单引号,反之亦然,这很好。

 --- title: "Sample Document" output: html_document: toc: true theme: united date: '`r format(Sys.time(), "%d %B, %Y")`' author: baptiste --- 

或者可能类似于以下内容,请参阅R Markdown参数化报告

 params: reportDate: input: date label: 'Report Date:' value: as.POSIXct(Sys.Date()) 

对于同样的问题对我来说。 我用这个代码解决它。

 --- title: "bla bla" author: "My name" date: \`r format(Sys.Date(), "%B %d, %Y")`\' output: html_document --- 

最好。