试图在.csv文件上使用fread()但是得到内部错误" ch> eof"

时间:2015-07-10 18:17:41

标签: r data.table fread

我从fread得到错误:

  

内部错误:ch> eof检测eol时

尝试使用R 3.2.0读取从https服务器下载的csv文件时。我在Github上发现了一些相关内容https://github.com/Rdatatable/data.table/blob/master/src/fread.c,但我不知道如何使用它,如果有的话。谢谢你的帮助。

添加信息:数据是从这里下载的:

fileURL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06pid.csv"

然后我用

download.file(fileURL, "Idaho2006.csv", method = "Internal") 

3 个答案:

答案 0 :(得分:4)

问题是download.file无法与https一起使用method=internal,除非您使用的是Windows并设置了选项。由于fread在您传递URL而不是本地文件时使用download.file,因此它将失败。您必须手动下载文件,然后从本地文件中打开它。

如果您使用的是Linux或已拥有以下任一项,请改为method=wgetmethod=curl

如果你在Windows上但没有,也不想下载它们,请在setInternet2(use = TRUE)之前download.file

http://www.inside-r.org/r-doc/utils/setInternet2

例如:

fileURL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06pid.csv"
tempf <- tempfile()
download.file(fileURL, tempf, method = "curl")
DT <- fread(tempf)
unlink(tempf)

或者

fileURL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06pid.csv"
tempf <- tempfile()
setInternet2 = TRUE
download.file(fileURL, tempf)
DT <- fread(tempf)
unlink(tempf)

答案 1 :(得分:2)

fread()现在使用curl包下载文件。这看起来效果很好:

require(data.table) # v1.9.6+
fread(fileURL, showProgress = FALSE)

答案 2 :(得分:0)

根据我的经验解决此问题的最简单方法是从https中删除s。同时删除您不需要的方法。我的操作系统是Windows,我尝试了以下代码并且可以使用。

fileURL <- "http://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06pid.csv"
download.file(fileURL, "Idaho2006.csv")