我想知道是否有一个技巧可以将当前日期放在由.rmd
和knitr
包处理的rmarkdown
文档的YAML前端内容中。我以前在我的维基页面顶部有以下行,
_baptiste, `r format(Sys.time(), "%d %B, %Y")`_
它将在html输出中转换为 baptiste,2014年5月3日。现在,我想利用rmarkdown
提供的高级pandoc包装器,但在YAML头中使用r代码似乎不起作用:
---
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
任何解决方法?
答案 0 :(得分:292)
这有点棘手,但您只需要通过引用内联R表达式使date
字段在YAML中有效,例如
date: "`r format(Sys.time(), '%d %B, %Y')`"
然后解析错误将消失,日期将在降价输出中生成,因此Pandoc可以使用Sys.time()
中的值。
答案 1 :(得分:63)
跟进@Yihui。奇怪的是,我发现:
'`r format(Sys.Date(), "%B %d, %Y")`'
效果优于:
"`r format(Sys.Date(), '%B %d, %Y')`"
对于后者,每当在HTML和PDF输出之间切换时,RStudio选择将外部引号更改为'
,从而破坏代码。
答案 2 :(得分:13)
或者只引用双引号,反之亦然,这很有效。
---
title: "Sample Document"
output:
html_document:
toc: true
theme: united
date: '`r format(Sys.time(), "%d %B, %Y")`'
author: baptiste
---
答案 3 :(得分:11)
一种解决方法是使用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)
}
要使用RStudio中的KnitHTML
按钮,您可以编写一个自动使用brew
作为预处理器的自定义输出格式。使用brew
进行预处理可确保在预处理阶段保持文档中的knitr
代码块不受影响。理想情况下,rmarkdown
包应该在其API中公开元数据,并允许用户通过自定义函数运行它。
答案 4 :(得分:3)
或者,或许类似于以下内容,请参阅R Markdown Parameterized Reports
params:
reportDate:
input: date
label: 'Report Date:'
value: as.POSIXct(Sys.Date())
答案 5 :(得分:0)
---
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
---
最佳。
答案 6 :(得分:-1)
我今天被这个咬了。 我有
date: "
R□格式(Sys.Date(), “%B%d,%Y”)"
并获得与OP大致相同的错误,但在编织成单词时仅 。针织到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的建议,效果很好。
我不知道为什么会这样,而且我没有时间去挖掘-报告要完成。