Data corrente YAML in rmarkdown

Mi chiedo se c’è un trucco per mettere la data corrente nella parte anteriore dello YAML di un documento .rmd da elaborare da knitr e dal pacchetto rmarkdown . Avevo la seguente riga nella parte superiore delle mie pagine wiki,

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

e verrebbe convertito in baptiste, il 3 maggio 2014 nell’output HTML. Ora, vorrei approfittare del wrapper pandoc avanzato fornito da rmarkdown , ma il codice r nell’intestazione YAML non sembra funzionare:

 --- 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 

Qualche soluzione?

Questo è un po ‘complicato, ma è sufficiente rendere il campo date valido in YAML citando l’espressione R in linea, ad esempio

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

Quindi l’errore di analisi verrà eliminato e la data verrà generata nell’output di markdown, in modo che Pandoc possa utilizzare il valore di Sys.time() .

Basta seguire su @Yihui. Stranamente, ho trovato che:

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

funziona meglio di:

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

Per quest’ultimo, RStudio sceglie di cambiare le virgolette esterne in ' ogni volta che si passa dall’output HTML a PDF e quindi a rompere il codice.

Oppure basta citare le virgolette doppie e viceversa, questo funziona bene.

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

Una soluzione alternativa è usare il pacchetto brew e scrivere il tuo frontespizio YAML come modello di brew .

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

È ora ansible utilizzare una funzione brew_n_render che brew_n_render preprocesso del doc utilizzando brew e quindi eseguirà l’accesso a 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) } 

Per farlo funzionare con il pulsante KnitHTML in RStudio, è ansible scrivere un formato di output personalizzato che utilizzerà automaticamente brew come preprocessore. L'utilizzo di brew in pre-elaborazione garantisce che i blocchi di codice knitr nel documento non vengano modificati durante la fase di pre-elaborazione. Idealmente, il pacchetto rmarkdown dovrebbe esporre i metadati nella sua API e consentire agli utenti di eseguirlo attraverso una funzione personalizzata.

o, forse qualcosa di simile a quanto segue, vedere Rapporti parametrizzati R Markdown

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

inserisci la descrizione dell'immagine qui Per lo stesso problema per me. Lo risolvo usando questo codice.

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

Aggiorna Puoi anche usare un altro formato.

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

Migliore.