从1到7的反斜杠转义数字在打印时似乎没有任何作用。
我很好奇R如何解释它们,部分原因是它们似乎遵循一些奇怪的比较规则:
'\1' == '\2' # FALSE
'\1' < '\2' # FALSE
'\1' > '\2' # FALSE
'\1' <= '\2' # TRUE
'\1' >= '\2' # TRUE
编辑:行为似乎与平台有关,所以这是我的sessionInfo
R version 3.5.2 (2018-12-20)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Arch Linux
Matrix products: default
BLAS: /usr/lib/libopenblasp-r0.3.5.so
LAPACK: /usr/lib/liblapack.so.3.8.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.2
答案 0 :(得分:3)
它们是octal constants/literals for ASCII characters:“反斜杠后跟最多三个数字将被解释为ASCII字符的八进制符号”
\ 1表示\ 001,\ 2表示\ 002等;这两个都是unprintable control characters (SOM and EOA, to be precise)。 它们不等同于字符串“ 1”,“ 2”,我想您假设它们是或应该是。
您可以通过以下方式查看其实际原始数值:
> charToRaw('\1')
[1] 01
> charToRaw('\2')
[1] 02
> charToRaw('1')
[1] 31
> charToRaw('2')
[1] 32
> charToRaw('\001')
[1] 01
> charToRaw('\002')
[1] 02
</==/>
比较行为很奇怪且不一致,我确认在Mac OS的R 3.5.1中,在语言环境en_US.UTF-8中得到了相同的结果。?base::Quotes
或查看R Language Definition : 10.3.1 Constants : Octal Characters