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())
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.