所以这对我来说是一个莫名其妙的错误,如果没有人有解释,我建议这是一个错误:
我有以下代码将文件导入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编码奇怪地起作用并且文件被正确导入。