与双引号“”相比,何时使用反引号 ' '?

Kev*_*Lee 3 r tibble

到目前为止我所知道的...

1)当使用包含数字、空格或其他符号的非语法变量/列名称创建小标题时,使用反引号(因为通常只能用字母命名列,对吗?)

 tb <- tibble( 
               ': ) ' = "smile, ' ' = "space", 
               '2000' = "number", "double_quotes" = "normal_text")
Run Code Online (Sandbox Code Playgroud)

但是,当我在这里使用双引号时,小标题仍然由非语法符号/数字组成。

2) 使用双括号时,双引号用于对列名称进行子集化。

  tb[["double_quotes"]]
Run Code Online (Sandbox Code Playgroud)

在这里,当我使用单引号进行子集化时,它仍然有效。

3)当使用 $ 进行子集化时,要选择非语法名称,我必须使用单引号,但在这里,如果我使用双引号进行子集化,它也可以工作

同样,tb$": )"效果也一样好tb$': )'

那么它们实际上可以互换吗?


有趣的是,当我绘制图表时

annoying <- tibble(
  `1` = 1:10,
  `2` = `1` * 2 + rnorm(length(`1`))
)

ggplot(annoying, aes(x = `1`, y = `2`)) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

引用非语法变量时必须使用单引号,否则看起来 ggplot 将 X 和 Y 分别视为 1 和 2 的单点。还有其他类似的案例吗?

Ben*_*ker 5

区分单引号 (\') 和反引号(或“反单引号”)(`) 很重要。

\n\n

您想知道的大部分内容都在?Quotes

\n\n
\n

单引号 (\') 和双引号 (") 分隔字符常量。它们可以互换使用,但首选双引号(并且使用双引号打印字符常量),因此单引号通常仅用于分隔包含双引号的字符常量\n。

\n\n

几乎总是可以使用其他[即非语法有效的]名称,只要它们被引用即可。首选引号是反引号\n (\xe2\x80\x98`\xe2\x80\x99) ...在许多\n情况下可以使用单引号或双引号(作为字符\n常量通常会转换为一个名字)。反引号可能必不可少的一个地方是在公式中分隔变量名称:请参阅 \xe2\x80\x98formula\xe2\x80\x99。

\n
\n\n

例如,如果要定义包含空格的变量名,则需要反引号:

\n\n
`a b` <- 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

双引号在这里也起作用(令我惊讶的是!)

\n\n
"a b" <- 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果您想在表达式中使用结果变量,则需要使用反引号。"a b" + 1给出错误(“二元运算符的非数字参数”)但`a b`+1有效。

\n\n

正如 @r2evans 指出的,相同的规则也适用于 tidyverse 表达式。您可以使用双引号或单引号(如果您愿意)来定义新变量:mtcars %>% mutate("my stuff"=4),但如果您想随后在表达式中使用该变量(或任何其他非语法变量),则必须反引号保护它:mtcars %>% mutate("my stuff"=4, new=`my stuff` + 5)

\n\n

对于所有非语法变量引用使用反引号,对于字符常量使用单引号,这可能是最佳实践/最不混乱。

\n