YAML date actuelle dans rmarkdown
Je me demande s'il y a une astuce pour mettre la date actuelle dans le front-matter YAML d'un document .rmd
à traiter par knitr
et le paquet rmarkdown
. J'avais l'habitude d'avoir la ligne suivante en haut de mes pages wiki,
_baptiste, `r format(Sys.time(), "%d %B, %Y")`_
Et il serait converti enbaptiste, 03 mai 2014 dans la sortie html. Maintenant, je voudrais profiter du wrapper pandoc avancé fourni par rmarkdown
, mais avoir du code r dans L'en-tête YAML ne semble pas fonctionner:
---
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
Tout solution de contournement?
6 réponses
C'est un peu délicat, mais il vous suffit de rendre le champ date
valide dans YAML en citant l'expression R en ligne, par exemple
date: "`r format(Sys.time(), '%d %B, %Y')`"
Ensuite, L'erreur d'analyse aura disparu, et la date sera générée dans la sortie markdown afin que Pandoc puisse utiliser la valeur de Sys.time()
.
Je fais juste le suivi de @ Yihui. Curieusement, j'ai trouvé que:
'`r format(Sys.Date(), "%B %d, %Y")`'
Fonctionne mieux que:
"`r format(Sys.Date(), '%B %d, %Y')`"
Pour ce dernier RStudio choisit de changer les guillemets externes en '
chaque fois que vous basculez entre la sortie HTML et PDF et que vous cassez ainsi le code.
Ou juste un guillemet les guillemets doubles et vice versa, cela fonctionne bien.
---
title: "Sample Document"
output:
html_document:
toc: true
theme: united
date: '`r format(Sys.time(), "%d %B, %Y")`'
author: baptiste
---
Une solution consiste à utiliser le paquet brew
et à écrire votre front matter YAML en tant que modèle brew
.
---
title: "Sample Document"
output:
html_document:
toc: true
theme: united
date: <%= format(Sys.time(), "%d %B, %Y") %>
author: baptiste
---
Vous pouvez maintenant utiliser une fonction brew_n_render
qui prétraiterait le document en utilisant brew
, puis l'exécuter via 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)
}
Pour que cela fonctionne avec le bouton KnitHTML
dans RStudio, vous pouvez écrire un format de sortie personnalisé qui utilisera automatiquement brew
comme préprocesseur. L'utilisation de brew
pour prétraiter garantit que les morceaux de code knitr
de votre document ne sont pas touchés pendant étape de pré-traitement. Idéalement, le paquet rmarkdown
devrait exposer les métadonnées dans son API et permettre aux utilisateurs de les exécuter via une fonction personnalisée.
Ou, peut-être quelque chose comme ce qui suit, voir R Markdown rapports paramétrés
params:
reportDate:
input: date
label: 'Report Date:'
value: as.POSIXct(Sys.Date())
Pour le même problème pour moi. Je le résous en utilisant ce code .
---
title: "bla bla"
author: "My name"
date: \`r format(Sys.Date(), "%B %d, %Y")`\
output: html_document
---
Mettre à jour Vous pouvez également utiliser un autre format .
---
title: "bla bla"
author: "My name"
date: \`r format(Sys.Date(), "%m %d,%Y")`\
output: html_document
---
MEILLEUR.