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?

165
demandé sur baptiste 2014-05-04 00:13:29

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

240
répondu Yihui Xie 2014-05-07 22:12:56

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.

55
répondu John M 2016-05-24 08:49:45

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
---
11
répondu SabDeM 2015-07-13 23:12:25

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.

10
répondu Ramnath 2014-05-04 16:39:32

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())
3
répondu JustAnother 2016-02-27 06:13:48

entrez la description de l'image iciPour 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.

0
répondu Saber bouabid 2018-01-19 11:23:07