到目前为止我所知道的...
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 的单点。还有其他类似的案例吗?
区分单引号 (\') 和反引号(或“反单引号”)(`) 很重要。
\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`a b` <- 1\nRun Code Online (Sandbox Code Playgroud)\n\n双引号在这里也起作用(令我惊讶的是!)
\n\n"a b" <- 1\nRun Code Online (Sandbox Code Playgroud)\n\n但如果您想在表达式中使用结果变量,则需要使用反引号。"a b" + 1给出错误(“二元运算符的非数字参数”)但`a b`+1有效。
正如 @r2evans 指出的,相同的规则也适用于 tidyverse 表达式。您可以使用双引号或单引号(如果您愿意)来定义新变量:mtcars %>% mutate("my stuff"=4),但如果您想随后在表达式中使用该变量(或任何其他非语法变量),则必须反引号保护它:mtcars %>% mutate("my stuff"=4, new=`my stuff` + 5)。
对于所有非语法变量引用使用反引号,对于字符常量使用单引号,这可能是最佳实践/最不混乱。
\n