Мне интересно, если есть трюк, чтобы поместить текущую дату в переднюю часть YAML документа .rmd
, который будет обрабатываться knitr
и пакетом rmarkdown
. Раньше у меня была следующая строка вверху моих страниц wiki,
_baptiste, `r format(Sys.time(), "%d %B, %Y")`_
и он будет преобразован в baptiste, 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
Любое обходное решение?
Это немного сложно, но вам просто нужно сделать поле date
допустимым в YAML, указав выражение inline R, например.
date: "`r format(Sys.time(), '%d %B, %Y')`"
Тогда ошибка синтаксического анализа исчезнет, и дата будет сгенерирована в выводе меток, поэтому Pandoc может использовать значение из Sys.time()
.
includes: after_body: [ ... ]
поскольку действительным YAML будут только строки имени файла ... Так что нет никакой возможности includes: "`r list.files(...)`"
?
.md
файле .md
если в заголовке YAML есть keep_md: true
. Любое решение для этого?
Просто следуйте за @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
и запись вашего первого элемента YAML в качестве шаблона 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 Parameterized Reports
params:
reportDate:
input: date
label: 'Report Date:'
value: as.POSIXct(Sys.Date())
Я был укушен этим сегодня. я имел
date: "
формат r (Sys.Date(),"% B% d,% Y ") "
и получил более или менее ту же ошибку, что и ОП, но только при вязании на слово. Вязание в PDF было хорошо, прежде чем я пытался вязать в Word. Впоследствии это тоже не сработало.
Error in yaml::yaml.load(front_matter): Scanner error: while scanning for the next token at line 3, column 31 found character that cannot start any token at line 3, column 31 Calls: <Anonymous>... output_format_from_yaml_front_matter → parse_yaml_front_matter → <Anonymous> ->.Call
Позиция 31 является первым знаком%
Заменить это на
date: '
r формат (Sys.Date(), "% B% d,% Y") '
как советовал MLaVoie, работал нормально.
Я понятия не имею, почему это произошло, и у меня нет времени копаться - отчеты заканчиваются.
Для этой же проблемы для меня. Я решаю его с помощью этого кода.
---
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
---
Бест.
!expr
, напримерdate: !expr Sys.time()
, но теперь это тоже не работает.