我无意中遇到了这个问题,想知道这是不是可以解释。在一个玩具示例中,我在变量级别中放置了一个转义字符。
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
为例。所以我的问题是,为什么r假设我想让1\2
求值为1\002
?因为我没有显式地编写1\002
(因为\2
从技术上讲不是转义字符),r不应该抛出错误吗?
发布于 2019-04-16 09:21:22
我只想把@joran的答案说出来一点。当提到octal code时,?Quote
确实(某种程度上)在这里给出了原因
具有给定八进制码的
\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"
https://stackoverflow.com/questions/55697294
复制相似问题