修剪错误?未删除前导空格

trimws bug? leading whitespace not removed

Edit:感谢R Yoda,我终于能够创建一个可复制的我面临的问题示例:

x = rawToChar(as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32)))
trimws(x)

=> 问题:我怎样才能 trim x?

问题的旧文本:
请参阅随附的屏幕截图。不幸的是,我无法创建可重现的示例,因为 dput 正在影响结果...

有人知道如何调查 x 出了什么问题吗?前导空格似乎不是标准的!

charToRaw(x) 给出 a0 31 31 2e 31 33 32 35 39 32
dput(charToRaw(x)) 给出 as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32))
Encoding(x) 给出 "unknown"(与 Encoding(" 11.132592") 相同)

一个可能的解决方案是用正确的空格替换错误编码的空格:

trimws(rawToChar(replace(x1, x1 == as.raw(0xa0), as.raw(0x20))))

给出:

[1] "11.132592"

要转换为数字,只需将上面的代码包装在 as.numeric.


已用数据:

x1 <- as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32))

0xa0是在R中编码另一种space(不间断的space),而0x20是白色的[=27] =].
trimws 搜索白色 space 或制表符或换行符或回车符 returns(由 [ \t\r\n]+ 表示)但不搜索不间断的 space,因此它确实不工作。
您可以使用 sub(抑制前导或尾随 spaces)或 gsub(同时抑制尾随和前导 spaces)来删除任何类型的尾随或前导space(s)(包括0xa0代表的那个):

sub("^\s+", "", x)
[1] "11.132592"

并删除前导和尾随 spaces:

gsub("(^\s+)|(\s+$)", "", x)