Текущая дата YAML в rmarkdown



мне интересно, есть ли трюк, чтобы поместить текущую дату в фронт ЯМЛА-дело a .rmd документ для обработки knitr и rmarkdown пакета. Раньше у меня была следующая строка в верхней части моих вики-страниц,



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


и он будет преобразован в Батист, 03 мая 2014 в выводе html. Теперь я хотел бы воспользоваться расширенной оболочкой pandoc, предоставленной rmarkdown, но наличие кода r в заголовке YAML не похоже на работа:



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


любой обходной путь?

873   6  

6 ответов:

Это немного сложно, но вам просто нужно сделать date поле допустимо в YAML путем цитирования встроенного выражения R, например

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

тогда ошибка разбора исчезнет, и дата будет сгенерирована в выводе markdown, чтобы Pandoc мог использовать значение из Sys.time().

просто следим за @Yihui. Как ни странно, я обнаружил, что:

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

работает лучше, чем:

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

для последнего RStudio выбирает изменить внешние кавычки на ' всякий раз, когда переключение между HTML и PDF вывода и, таким образом, нарушение кода.

или просто одинарные кавычки в двойные кавычки и наоборот, это хорошо работает.

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

один обходной путь заключается в использовании brew упакуйте и напишите ваше дело фронта ЯМЛ как brew шаблон.

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

теперь вы можете использовать brew_n_render функция, которая будет предварительно обрабатывать документ с помощью brew а потом бежать через 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)
}

чтобы сделать эту работу с KnitHTML кнопка в RStudio, вы можете написать пользовательский формат вывода, который будет автоматически использовать brew как препроцессор. Используя brew для предварительной обработки гарантирует, что knitr код куски в документе остаются нетронутыми на этапе предварительной обработки. В идеале,rmarkdown пакет должен предоставлять метаданные в своем API и позволять пользователям запускать его через пользовательскую функцию.

или, возможно, что-то вроде следующего, см. R Markdown Параметризованные Отчеты

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

enter image description hereдля той же проблемы для меня. Я решаю ее с помощью этого кода .

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

обновление Вы также можете использовать другой формат .

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

лучшие.

Comments

    Ничего не найдено.