Fecha actual de YAML en rmarkdown

Me pregunto si hay un truco para poner la fecha actual en el frente de YAML de un documento .rmd para ser procesado por knitr y el paquete rmarkdown . Solía ​​tener la siguiente línea en la parte superior de mis páginas wiki,

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

y se convertiría a baptiste, el 3 de mayo de 2014 en la salida html. Ahora, me gustaría aprovechar el envoltorio avanzado de pandoc provisto por rmarkdown , pero tener el código r en el encabezado YAML no parece funcionar:

 --- 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:  ... output_format_from_yaml_front_matter -> parse_yaml_front_matter ->  -> .Call 

Cualquier solución?

Esto es un poco complicado, pero solo necesita hacer que el campo de date válido en YAML citando la expresión R en línea, por ejemplo

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

Luego, el error de análisis desaparecerá y la fecha se generará en el resultado de Sys.time() por lo que Sys.time() puede usar el valor de Sys.time() .

Simplemente siguiendo a @Yihui. Curiosamente, he encontrado que:

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

funciona mejor que:

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

Para este último, RStudio elige cambiar las comillas externas a ' cada vez que se alterna entre HTML y PDF y, por lo tanto, se rompe el código.

O simplemente cite las comillas dobles y viceversa, esto funciona bien.

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

Una solución es usar el paquete de brew y escribir su materia prima YAML como una plantilla de brew .

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

Ahora puede usar una función brew_n_render que preprocesaría el documento utilizando brew y luego ejecutar a través de 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) } 

Para hacer que esto funcione con el botón KnitHTML en RStudio, puede escribir un formato de salida personalizado que utilizará automáticamente brew como preprocesador. El uso de brew para preprocesar garantiza que los knitr código knitr en su documento no se toquen durante la etapa de preprocesamiento. Idealmente, el paquete rmarkdown debería exponer los metadatos en su API y permitir que los usuarios lo ejecuten a través de una función personalizada.

o, tal vez algo como lo siguiente, vea los informes paramétricos R Markdown

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

enter image description here Por el mismo problema para mí. Lo resuelvo usando este código.

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

Actualización También puede usar otro formato.

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

Mejor.