【发布时间】:2019-06-28 13:13:27
【问题描述】:
我正在使用 read.table 读取 UTF-8 编码的数据文件。使用 'encoding="UTF-8"' 选项时,任何无穷大符号都被读取为数字 8。
不管它的价值,这是有问题的一行:
read.table(file.path(workingDir, "datafile.csv"), sep=",", blank.lines.skip=TRUE, allowEscapes=FALSE, header=TRUE, encoding="UTF-8")
文件的sn-p:
所有其他值都被正确读取,所以我很茫然。有什么想法吗?
【问题讨论】:
-
如果你在 R 控制台中输入
∞,它唯一的解释方式就是8。 R 将\U221E理解为该符号,但您可能必须在导入之前将∞与\U221E(或R 理解的Inf)交换。不确定是否有另一种方法来处理这个问题。如果您希望 R 将∞理解为数学意义上的无穷大,您希望最终将值存储为Inf/-Inf -
谢谢 Mako。我在 R Studio 中测试时注意到了这一点;我认为这几乎构成了一个错误?我遇到的问题是这是允许用户选择输入文件的应用程序的一部分。这些输入文件是用 Inf 创建的,但一些编辑器似乎将其更改为符号,因此它绕过了原始文件的创建。我真的想避免重新转换回 Inf,因为这些文件可能非常大(10 GB)。你知道在 R 中处理这种导入转换的优雅方式吗?
-
一个更新,如果我用
∞保存一个Excel文件,然后用readxl::read_excel读入它,它会正确显示符号。但是,如果我dput对象,它将转换为字符8s -
不幸的是,
str和class没有告诉我任何解释为什么它正确显示符号的原因。 -
我认为这需要深入了解 readxl 的编写方式,但它可能会给出一个小提示; dput 有一定的意义,因为它会转换为 ASCII,因此会丢失无穷大符号。也许,在底层,即使使用编码选项,r 也将 read.table 值存储为 ascii
标签: r utf-8 character-encoding