the - Fecha actual de YAML en rmarkdown
r markdown tutorial pdf (6)
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: <Anonymous> ... output_format_from_yaml_front_matter ->
parse_yaml_front_matter -> <Anonymous> -> .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()
.
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
---
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.
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())
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.