为了账号安全,请及时绑定邮箱和手机立即绑定

Ymark中的YAML当前日期

Ymark中的YAML当前日期

眼眸繁星 2019-10-15 16:11:12
我想知道是否有技巧将当前日期放在.rmd要处理的文档knitr和rmarkdown程序包的YAML前端。我曾经在Wiki页面的顶部放置以下行,   _baptiste, `r format(Sys.time(), "%d %B, %Y")`_它将在html输出中转换为2014年5月3日的baptiste。现在,我想利用所提供的高级pandoc包装器rmarkdown,但是在YAML标头中包含r代码似乎不起作用:---title: "Sample Document"output:  html_document:    toc: true    theme: uniteddate: `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 7Calls: <Anonymous> ... output_format_from_yaml_front_matter ->        parse_yaml_front_matter -> <Anonymous> -> .Call任何解决方法?
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

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


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

然后解析错误将消失,日期将在markdown输出中生成,因此Pandoc可以使用中的值Sys.time()。


查看完整回答
反对 回复 2019-10-15
?
慕村225694

TA贡献1880条经验 获得超4个赞

一种解决方法是使用该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)

}

要使用KnitHTMLRStudio中的按钮进行此操作,您可以编写一种自定义输出格式,该格式将自动brew用作预处理程序。使用brew进行预处理可确保knitr在预处理阶段保持文档中的代码块不变。理想情况下,rmarkdown程序包应在其API中公开元数据,并允许用户通过自定义功能运行它。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1440 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信