我正在使用RStudio中的knitr编译我的Markdown文件中的错误.我不确定这个'错误'应该指向哪里.每个说法似乎不是'R'错误.
如果我创建一个带有以下YAML标题内容的R markdown文档,我可以编辑该文件:
---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date: "`r format(Sys.time(), '%I:%M')`"
output: html_document
---
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是将format语句中的单引号更改为双引号(这是我最初使用的),
---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date: "`r format(Sys.time(), "%I:%M")`"
output: html_document
---
Run Code Online (Sandbox Code Playgroud)
我得到以下运行时错误:
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
Run Code Online (Sandbox Code Playgroud)
我进行了足够的实验,知道它是冒号':'导致问题,如果您使用"%A%d",则不会产生错误.
我在周围搜索并发现了一些断言,单引号和双引号在R中通常是等价的,尽管你不能将双引号与单引号配对并让它像两个双引号一样.
显然我有一个工作代码示例,它做了我需要做的事情,但我通常使用双引号,我想知道我怎么知道什么时候应该使用单引号?
Ant*_*hon 13
单引号和双引号在R中通常是等价的(就像它们在Python中一样)是无关紧要的,解析问题发生在YAML级别上.
你不需要在YAML中引用标量,但是如果你这样做,你需要知道双引号样式标量("
)需要转义:
这是唯一能够通过使用"\"转义序列表达任意字符串的样式.这是以逃避"\"和""字符为代价的.
因此,如果您想在双引号内使用双引号,则必须执行以下操作:
---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date: "`r format(Sys.time(), \"%I:%M\")`"
output: html_document
---
Run Code Online (Sandbox Code Playgroud)
SabDeM的解决方案也起作用,因为标量中没有单引号
`r format(Sys.time(), "%I:%M")`
Run Code Online (Sandbox Code Playgroud)
但是,单引号样式标量只能表示仅包含可打印字符的字符串.
标量往往并不需要在YAML在所有被引用,因为你已经用钥匙(做title
,author
等).但是简单的样式标量不能以反引号开头.我会为所有标量使用普通样式,除了date
键的值和使用该文字样式(仅),以使IMO更易读:
---
title: Eye tracking AOI plots
author: Steven Vannoy
date: |-
`r format(Sys.time(), "%I:%M")`
output: html_document
---
Run Code Online (Sandbox Code Playgroud)
这与您的YAML完全相同.
正如我在评论中所说,问题可能在于 knit 不知道如何解析嵌套符号,或者问题可能与引用 ` 您需要的事实有关,"
反之亦然。这段代码有效,并为后一个假设提供了一个优势:
---
title: "Eye tracking AOI plots"
author: "Steven Vannoy"
date: '`r format(Sys.time(), "%I:%M")`'
output: html_document
---
Run Code Online (Sandbox Code Playgroud)