1

所以这对我来说是一个莫名其妙的错误,如果没有人有解释,我建议这是一个错误:

我有以下代码将文件导入R:

rm(list = ls())
library(data.table)
DT <- data.table(read.csv("file.csv", header=TRUE, sep = "Æ", quote = "", dec = ",", stringsAsFactors=TRUE, row.names = NULL))

效果很好。我总是使用分隔符从 Access 导出数据,Æ因为它是一个很好的字符,不会出现在我的文件中。

现在对于错误:

当我使用代码创建一个新文件(“import.r”)时:

DT <- data.table(read.csv("file.csv", header=TRUE, sep = "Æ", quote = "", dec = ",", stringsAsFactors=TRUE, row.names = NULL))

并在原始代码中使用源代码:

rm(list = ls())
library(data.table)
source("import.r")

我得到错误:

Error in scan(file, what = "", sep = sep, quote = quote, nlines = 1, quiet = TRUE,  : 
  invalid 'sep' value: must be one byte

有趣的是,如果我不使用Æ分隔符,但|在获取文件时它工作得很好。因此,错误显然是由Æ用作分隔符引起的(如错误中所述)。

但是,当直接调用相同的导入命令时,如何能够正常工作,但在通过调用时返回看似无关的错误source()

编辑:使用不同的编码读取字符会返回不同的结果:

> readLines(textConnection("Æ",encoding="UTF-8"))
[1] "Æ"
> readLines(textConnection("Æ"))
[1] "Æ"

正如詹姆斯在他的回答中建议的那样在代码中设置UTF-8编码奇怪地起作用并且文件被正确导入。

4

1 回答 1

1

这似乎是一个编码问题。Æ通过使用 UTF-8 编码的文本连接读取时,会返回 2 个字符:

readLines(textConnection("Æ",encoding="UTF-8"))
[1] "Æ"

然而奇怪的是,在采购时将 UTF-8 设置为编码允许正确读取数据。

于 2015-07-15T13:54:01.230 回答