gpt4 book ai didi

r - r Markdown 的 Yaml header 中的单引号和双引号有什么区别?

转载 作者:行者123 更新时间:2023-12-02 05:18:12 25 4
gpt4 key购买 nike

我在 RStudio 中使用 knit 编译的 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
---

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

---
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 (") 需要转义:

This is the only style capable of expressing arbitrary strings, by using “\” escape sequences. This comes at the cost of having to escape the “\” and “"” characters.

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

---
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 中引用,就像您已经使用键(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 完全相同。

关于r - r Markdown 的 Yaml header 中的单引号和双引号有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31394661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com