r Markdown の Yaml ヘッダーにおける一重引用符と二重引用符の違いは何ですか? 質問する

r Markdown の Yaml ヘッダーにおける一重引用符と二重引用符の違いは何ですか? 質問する

RStudio で knitr を使用してコンパイルしている r Markdown ファイルにエラーが発生しています。この「エラー」がどこに向けられるのかよくわかりません。厳密に言えば「R」エラーではないようです。

次の YAML ヘッダー コンテンツを含む R マークダウン ドキュメントを作成すると、ファイルを問題なく結合できます。

---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date:  "`r format(Sys.time(), '%I:%M')`"
output: html_document
---

しかし、フォーマットステートメント内の単一引用符を二重引用符(元々使用していたもの)に変更するだけで、

---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date:  "`r format(Sys.time(), "%I:%M")`"
output: html_document
---

次の実行時エラーが発生します:

Error in yaml::yaml.load(enc2utf8(string), ...) : 
  Scanner error: while scanning for the next token at line 3, column 32found character that cannot start any token at line 3, column 32
Calls: <Anonymous> ... yaml_load_utf8 -> mark_utf8 -> <Anonymous> -> .Call
Execution halted

いろいろ試した結果、問題の原因はコロン「:」であることがわかりました。たとえば「%A %d」を使用するとエラーは発生しません。

検索してみたところ、R では一重引用符と二重引用符は一般に同等であるが、二重引用符を一重引用符と組み合わせて 2 つの二重引用符のように動作させることはできないという主張がいくつか見つかりました。

明らかに、必要なことを実行する実用的なコード サンプルがありますが、通常は二重引用符を使用しており、一重引用符を使用する必要がある場合をどうやって知ることができるのか疑問に思っています。

ベストアンサー1

R では一重引用符と二重引用符が一般に同等であること (たとえば Python の場合と同様) は無関係であり、解析の問題は YAML レベルで発生します。

YAMLではスカラーを引用符で囲む必要はありませんが、もしそうするなら、次のことを知っておく必要があります。二重引用符スタイルのスカラー( ") はエスケープが必要です:

これは、「\」エスケープ シーケンスを使用して任意の文字列を表現できる唯一のスタイルです。ただし、「\」および「"」文字をエスケープする必要があります。

したがって、二重引用符内で二重引用符を使用する場合は、次のようにする必要があります。

---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date:  "`r format(Sys.time(), \"%I:%M\")`"
output: html_document
---

SabDeMの解決策がうまく機能するのは、スカラー内にシングルクォートがないためです。

`r format(Sys.time(), "%I:%M")`

ただし、一重引用符スタイルのスカラーは、印刷可能な文字のみで構成される文字列を表すことができます。


titleスカラーは、キー( 、など)で既に行っているように、YAMLで引用符で囲む必要がまったくないことがよくありますauthor。しかし、プレーンスタイルのスカラーはバッククォートで始めることはできません。プレーンスタイルdateキーの値を除くすべてのスカラーに対して文字通りのスタイルその 1 つ (のみ) については、IMO を読みやすくするために、次の操作を行います。

---
title: Eye tracking AOI plots
author: Steven Vannoy
date: |-
  `r format(Sys.time(), "%I:%M")`
output: html_document
---

これは YAML とまったく同じです。

おすすめ記事