Fecha actual de YAML en rmarkdown

Resuelto baptiste asked hace 54 años • 8 respuestas

Me pregunto si hay algún truco para poner la fecha actual en la parte frontal YAML de un .rmddocumento que será procesado por knitrel rmarkdownpaquete. 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, 03 de mayo de 2014 en la salida html. Ahora, me gustaría aprovechar el contenedor pandoc avanzado proporcionado por rmarkdown, pero tener 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

¿Alguna solución?

baptiste avatar Jan 01 '70 08:01 baptiste
Aceptado

Esto es un poco complicado, pero solo necesita hacer que el datecampo sea 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 la salida de rebajas para que Pandoc pueda usar el valor de Sys.time().

Yihui Xie avatar May 07 '2014 22:05 Yihui Xie

Simplemente siguiendo a @Yihui. Curiosamente, he descubierto 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 'cada vez que se cambia entre la salida HTML y PDF y, por lo tanto, se rompe el código.

John M avatar Aug 19 '2014 17:08 John M

O simplemente comillas simples o 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
---
SabDeM avatar Jul 13 '2015 23:07 SabDeM

Una solución alternativa es utilizar el brewpaquete y escribir el texto frontal de YAML como brewplantilla.

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

Ahora puede usar una brew_n_renderfunción que preprocesaría el documento usando brewy luego ejecutaría 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 que esto funcione con el KnitHTMLbotón en RStudio, puede escribir un formato de salida personalizado que se utilizará automáticamente brewcomo preprocesador. El uso brewde preprocesamiento garantiza que los knitrfragmentos de código de su documento no se modifiquen durante la etapa de preprocesamiento. Idealmente, el rmarkdownpaquete debería exponer los metadatos en su API y permitir a los usuarios ejecutarlos a través de una función personalizada.

Ramnath avatar May 04 '2014 16:05 Ramnath

Alternativamente, si utiliza el nuevo formato cuarto https://quarto.org . puedes hacer esto en el encabezado yaml de un archivo .qmd.

——-
title: title of my doc
date: today
format:
  html:
    theme: default
——-

Para formatear, consulte las opciones de formato aquí .

Como ejemplo,

date: 03/07/2005
date-format: long
olivroy avatar Jun 16 '2022 12:06 olivroy