web-dev-qa-db-ja.com

rmarkdownのYAML現在日付

.rmdドキュメントのYAMLフロントマテリアルに現在の日付を入れて、knitrおよびrmarkdownパッケージによって処理されるトリックがあるかどうか疑問に思っています。 wikiページの上部に次の行がありましたが、

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

hTML出力ではbaptiste、03 May、2014に変換されます。ここで、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

回避策はありますか?

199
baptiste

これは少し注意が必要ですが、YAMLでdateフィールドを有効にするには、インラインR式を引用する必要があります。

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

その後、解析エラーがなくなり、日付がマークダウン出力に生成されるため、PandocはSys.time()の値を使用できます。

297
Yihui Xie

@Yihuiをフォローアップしています。奇妙なことに、私はそれを見つけました:

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

以下よりもうまく動作します:

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

後者の場合、RStudioは、HTML出力とPDF出力を切り替えるたびに外側の引用符を'に変更し、コードを壊すことを選択します。

63
John M

または、二重引用符を単一引用符で囲むか、その逆も同様です。これはうまく機能します。

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

回避策の1つは、brewパッケージを使用して、YAMLフロントマターをbrewテンプレートとして記述することです。

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

これで、brewを使用してドキュメントを前処理してからrmarkdownを実行するbrew_n_render関数を使用できます。

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でメタデータを公開し、ユーザーがカスタム関数を使用して実行できるようにする必要があります。

11
Ramnath

または、おそらく次のようなものを参照してください R Markdown Parameterized Reports

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

enter image description here 私にとっても同じ問題です。このコードを使用して解決します。

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

Update別の形式も使用できます。

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

ベスト。

0
Saber bouabid