YAML date actuelle dans le rmarkdown

Je me demande s’il y a un truc pour mettre la date actuelle dans le document YAML d’un document .rmd à traiter par knitr et le paquetage 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 en baptiste, 03 mai 2014 dans la sortie HTML. Maintenant, je voudrais profiter du wrapper pandoc avancé fourni par rmarkdown , mais avoir le 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:  ... output_format_from_yaml_front_matter -> parse_yaml_front_matter ->  -> .Call 

Une solution de contournement?

C’est un peu délicat, mais vous devez simplement rendre le champ de 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’parsing sera Sys.time() et la date sera générée dans la sortie de Sys.time() afin que Pandoc puisse utiliser la valeur de Sys.time() .

Il suffit de suivre @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 remplacer les guillemets externes par ' chaque fois que l’on passe de la sortie HTML à la version PDF et brise ainsi le code.

Ou simplement citer 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 de contournement consiste à utiliser le package d’ brew et à écrire votre document principal en tant que modèle d’ 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é- brew_n_render la doc à l’aide de brew , puis exécutera 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 de RStudio, vous pouvez écrire un format de sortie personnalisé qui utilisera automatiquement brew comme préprocesseur. L'utilisation de brew pour pré- knitr permet de s'assurer que les knitr code knitr dans votre document ne sont pas knitr pendant la phase de prétraitement. Idéalement, le package rmarkdown devrait exposer les métadonnées dans son API et permettre aux utilisateurs de l'exécuter via une fonction personnalisée.

ou, peut-être quelque chose comme ceci, voir Rapports paramétrés R Markdown

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

entrer la description de l'image ici Pour le même problème pour moi. Je le résout en utilisant ce code.

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

Mise à 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.