为什么R中有nchar("\\")=1, nchar("\abcde")=5
等?哪个函数用于nchar("\\")=2, nchar("\abcde")=6
?
答案 0 :(得分:6)
在R中,如果你想要一个文字\
,你需要像其他人所说的那样逃避它。我没有在您的示例中看到encodeString()
的原因。使用nchar()
更容易,并记住我的答案的第一行:逃避您的\
> nchar("\\\\")
[1] 2
> nchar("\\abcde")
[1] 6
如果您想忘记转义,那么encodeString()
可以提供帮助,但您要么做一个(手动转义)或使用escapeString()
,而不是两者:
> encodeString("\\")
[1] "\\\\"
> encodeString("\abcde")
[1] "\\abcde"
最后,\uXXXX
是一种在R中输入unicode字符的方法,这样可以捕获encodeString()
:
> nchar(encodeString("\u2642"))
[1] 1
因为它想将此视为unicode字符的表示。在这种情况下,“逃避他们自己”的事情做对了:
> nchar("\\u2642")
[1] 6
我不确定将\
替换为R中\\
的字符串为\uXXXX
的直接方式,因为它将首先解释为unicdoe字符且仅然后将进行替换(但此时没有\
。请参阅?Quotes
以获取R中使用的转义序列列表。
答案 1 :(得分:4)
反斜杠是escaping下一个字符。 这在许多编程语言中很常见;允许您在字符串中嵌入控件和其他非打印字符,例如`\ n'表示换行符。
所以'\'实际上是单\
个字符。
解决问题的最简单方法是将反斜杠加倍:nchar("\\abcde") = 6
。
答案 2 :(得分:1)
nchar(encodeString("\\"))
应该给你你想要的东西。