我在RStudio中使用knitr编译的r Markdown文件中遇到错误。我不确定该“错误”应指向何处。每句话似乎都不是'R'错误。
如果我使用以下YAML header 内容创建R markdown文档,则可以很好地编织文件:
---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date: "`r format(Sys.time(), '%I:%M')`"
output: html_document
---
但是,如果我只是将format语句中的单引号更改为双引号(这是我最初使用的格式),
---
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中单引号和双引号通常是等效的,尽管您不能将双引号与单引号配对,并且使其像两个双引号一样工作。
显然,我有一个工作代码示例可以完成我需要做的事情,但是我通常使用双引号,并且想知道如何知道何时应该使用单引号?
最佳答案
单引号和双引号在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")`
但是,单引号样式的标量只能表示仅由可打印字符组成的字符串。
标量通常不需要在YAML中用引号引起来,就像您已经使用过键(
title
,author
等)一样。但是普通样式的标量不能以反引号开头。我应该将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。