YAML rmarkdown中的当前日期

YAML rmarkdown中的当前日期,r,yaml,knitr,r-markdown,R,Yaml,Knitr,R Markdown,我想知道是否有一个技巧可以将当前日期放在.rmd文档的YAML前面,该文档将由knitr和rmarkdown包处理。我以前在我的维基页面顶部有下面一行 _baptiste, `r format(Sys.time(), "%d %B, %Y")`_ 它将在html输出中转换为baptiste,2014年5月3日。现在,我想利用rmarkdown提供的高级pandoc包装器,但是在YAML头中使用r代码似乎不起作用: --- title: "Sample Document" output:

我想知道是否有一个技巧可以将当前日期放在
.rmd
文档的YAML前面,该文档将由
knitr
rmarkdown
包处理。我以前在我的维基页面顶部有下面一行

   _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
---
标题:“样本文件”
输出:
html_文件:
toc:没错
主题:联合国
日期:`r格式(Sys.time(),%d%B,%Y”)`
作者:巴蒂斯特
---
yaml::yaml.load中的错误(前端事件):
扫描程序错误:在第6行第7列扫描下一个令牌时
在第6行第7列找到无法启动任何标记的字符
电话:。。。输出\u格式\u来自\u yaml\u前端\u事项->
解析前面的问题->->。呼叫

任何解决方法?

一种解决方法是使用
brew
软件包,将YAML前端内容编写为
brew
模板

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

要使用RStudio中的
KnitHTML
按钮实现此功能,您可以编写一种自定义输出格式,该格式将自动使用
brew
作为预处理器。使用
brew
进行预处理可确保文档中的
knitr
代码块在预处理阶段未被触及。理想情况下,
rmarkdown
包应该在其API中公开元数据,并允许用户通过自定义函数运行它。

这有点棘手,但您只需要通过引用内联R表达式使YAML中的
日期
字段有效,例如

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

然后解析错误将消失,日期将在降价输出中生成,这样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
---
我也有同样的问题。我用这个代码解决它

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

最好。

或者,可能类似以下内容,请参见


我今天被这个咬了。 我有

并且得到了与OP大致相同的错误,但是当编织到word时,。在我尝试编织Word之前,编织pdf很好。后来也没用

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`
正如MLaVoie所建议的那样,他工作得很好


我不知道为什么会发生这种情况,我也没有时间去挖掘——要完成报告。

谢谢拉姆纳特,那会有用的。最好不要在工作流中有额外的步骤和临时文件;根据我的经验,这个过程越复杂,几个月后它的重现性就越差(也就是说,我不记得它是如何工作的)。我很惊讶这不再有效,因为这正是我过去所做的。我看看最近发生了什么事。顺便说一句,yaml还支持通过
从R计算的值!expr
,例如
日期:!expr Sys.time()
,但现在这也不起作用。我想这意味着内联R不能用于例如列表
包括:在正文之后:[……]
,因为有效的YAML将仅是文件名字符串。。。因此,
不可能包括:“`r list.files(…)`
?@Yihui这在html输出中对我有效,但如果我在YAML头中有
keep_md:true
,则在生成的
.md
文件中无效。对此有什么解决方案吗?对于任何其他美国人:
date:“`r格式(Sys.time(),'%B%d,%Y')`”
。嗨@Yihui,我在pdf文件的日期输出中得到了混乱的月份。你知道我怎样才能解决这个问题吗?谢谢。如果您需要日期中的点,请记住转义和转义:
r格式(Sys.time(),“%d\\\\.%B%Y”)
反斜杠是否应该在那里?反斜杠不应该在那里。没有他们,代码就可以工作。同意。“”不适合我,但“”适合我。非常感谢。
params:
  reportDate:
    input: date
    label: 'Report Date:'
    value: as.POSIXct(Sys.Date())
date: "`r format(Sys.Date(), "%B %d, %Y")`"
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`
date: '`r format(Sys.Date(), "%B %d, %Y")`'