我无意中遇到了这个问题,想知道是否对此有一个解释。在一个玩具示例中,我将转义字符置于可变级别。
library(dplyr)
library(gt)
mt2 <- mutate(mtcars, cylx = ifelse(cyl == 4, "1\2", "2/3"))
最初,我认为当cyl为4时,它将简单地转义为'2'。但是1\2
实际上是1\002
的值。使用View(mt2)
时看不到它,但是当您尝试打印表gt::gt(mt2)
时,它的确计算为特殊字符。这将显示在所有打印选项中,但我以gt
为例。
所以我的问题是,为什么要假设我希望1\2
评估为1\002
?
1\002
(因为从技术上说\2
不是转义字符)而抛出错误吗?
答案 0 :(得分:2)
我只想稍微介绍一下@joran的答案。 ?Quote
在提到octal code
\ nnn具有给定八进制代码(1、2或3位数字)的字符
因此,在\
之后添加三位数的八进制代码将产生corresponding数字/字符:
> c('\110' ,'\074', '\076')
[1] "H" "<" ">"
因此,当您提供'\002'
时,如链接所示,您将获得八进制代码002
。
此外,R不需要您为这些八进制代码提供前导0。 R只是假设您要包含它们。
> c('\110' ,'\74', '\76')
[1] "H" "<" ">"
> '\2' == '\002'
[1] TRUE
> '\2' == '\02'
[1] TRUE
as.octmode()
是对此进行思考的另一种方式:
以八进制格式转换或打印整数,以显示最大数所需的位数,并根据需要使用前导零。
> as.octmode("002")
[1] "2"