对于Markdown,Yaml标题中的单引号和双引号有什么区别?

时间:2015-07-13 22:36:40

标签: r yaml knitr

我在我的Markdown文件中收到错误,我正在使用RStudio中的knitr进行编译。我不确定这个'错误'应该指导。它似乎不是一个' R'每个人说错误。

如果我使用以下YAML标题内容创建一个R markdown文档,我可以编辑该文件:

FALSE

但是,如果我只是将format语句中的单引号更改为双引号(这是我最初使用的那样),

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

我进行了充分的实验,知道这是结肠':'导致问题的原因是,如果您使用"%A%d"例如。

我在周围搜索并发现了一些断言,单引号和双引号在R中通常是等价的,尽管你不能将双引号与单引号配对并让它像两个双引号一样。

显然我有一个可以完成我需要做的工作代码示例,但我通常使用双引号,并且想知道我何时应该知道何时应该使用单引号?

2 个答案:

答案 0 :(得分:12)

单引号和双引号在R中通常是等价的(就像它们在Python中一样)是无关紧要的,解析问题发生在YAML级别上。

您不需要在YAML中引用标量,但如果您这样做,则需要知道double quoted style scalars")需要转义:

  

这是唯一能够通过使用“\”转义序列表达任意字符串的样式。这是以逃避“\”和“”字符为代价的。

因此,如果您想在双引号内使用双引号,则必须执行以下操作:

---
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")`

单引号样式标量但只能表示仅包含可打印字符的字符串。

Scalars通常根本不需要在YAML中引用,因为您已经使用了键(titleauthor等)。但是简单的样式标量不能以反引号开头。我会将plain style用于除date键的值以外的所有标量,并使用literal style(仅限于{}),以使IMO更具可读性:

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

这与你的YAML完全相同。

答案 1 :(得分:1)

正如我在评论中所说,问题是knitr不知道如何解析嵌套符号,或者问题可能与引用“你需要 // Create an instance of the DocumentClient. using (dbClient = new DocumentClient(new Uri(Properties.Settings.Default.EndpointUrl), Properties.Settings.Default.AuthorizationKey)) { Database database = dbClient.CreateDatabaseQuery().Where (db => db.Id == Properties.Settings.Default.databaseID).AsEnumerable().FirstOrDefault(); DocumentCollection collection = dbClient.CreateDocumentCollectionQuery(database.SelfLink).Where (c => c.Id == Properties.Settings.Default.collectionID).ToArray().FirstOrDefault(); // If database type is not null then continue to range index the collection if (collection != null) { stopsCollection.IndexingPolicy.IncludedPaths.Add( new IncludedPath { Path = "/*", Indexes = new System.Collections.ObjectModel.Collection<Index> { new RangeIndex(DataType.String) {Precision = 6}, new RangeIndex(DataType.Number) {Precision = 6} } } ); } else { Console.WriteLine(">> Unable to retrieve requested collection."); } } 的事实有关,反之亦然。这段代码有效,并对后一假设给予了加分:

"