rmarkdownのYAML現在の日付


247

現在の日付を、.rmd処理対象のドキュメントknitrrmarkdownパッケージの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: 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

回避策はありますか?


7
これは私が以前使用していたものとまったく同じなので、これが機能しなくなったことに驚いています。最近何が起こっているのかわかります。ところで、YAMLもRから経由して計算した値をサポート!exprなどを、date: !expr Sys.time()が、今、これはどちらか動作しません。
Yihui Xie 2014

回答:


366

これは少しトリッキーdateですが、インラインR式を引用して、フィールドをYAMLで有効にする必要があります。たとえば、

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

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


これはインラインRをリストに使用できないことを意味していると思います。たとえば、includes: after_body: [ ... ]有効なYAMLはファイル名の文字列だけなので...の可能性はありincludes: "`r list.files(...)`"ませんか?
Louis Maddox、2015年

1
@Yihuiこれはhtml出力では機能し.mdますkeep_md: trueが、YAMLヘッダー内にある場合、結果のファイルでは機能しません。これに対する解決策はありますか?
Matt SM

7
他のアメリカ人の場合:date: "`r format(Sys.time(), '%B %d, %Y')`"
ubomb

こんにちは@Yihuiです。pdfファイルに日付の出力が文字化けしました。この問題を解決するにはどうすればよいですか?ありがとうございました。
HW科学者

2
日付のドットが必要な場合は、それらをエスケープするとエスケープを逃れるために注意してください:r format(Sys.time(), '%d\\\\. %B %Y')
BurninLeo

72

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

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

よりもうまく機能します:

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

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


1
バックスラッシュはそこにあるつもりでしたか?
cwhy 2015年

4
円記号は使用できません。それらがなければ、コードは機能します。
rakensi

1
同意した。「」は機能しませんでしたが、「」は機能しました。ありがとうございました!
リアワッサー2017年

18

または、単一引用符と二重引用符の両方を使用し、逆もまた同様です。これはうまく機能します。

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

12

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


5
ラムナスに感謝します。ワークフローに余分なステップと一時ファイルを含めないようにするとよいでしょう。私の経験では、数か月後にプロセスが複雑になればなるほど、再現性が低下します(つまり、プロセスがどのように機能するか思い出せなくなります)。
バプティスト2014年


1

ここに画像の説明を入力してください私にとって同じ問題について。私はこのコードを使用してそれを解決します。

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

ベスト。


-1

今日はこれに噛まれました。持っていた

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

OPとほぼ同じエラーが発生しましたが、言葉に編み込んだときのみです。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`

31桁目は最初の%記号

これを

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

MLaVoieのアドバイスに従って、問題なく動作しました。

なぜこれが起こったのかはわかりませんし、掘り起こす時間もありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.