我从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")
答案 0 :(得分:4)
问题是download.file
无法与https一起使用method=internal
,除非您使用的是Windows并设置了选项。由于fread
在您传递URL而不是本地文件时使用download.file
,因此它将失败。您必须手动下载文件,然后从本地文件中打开它。
如果您使用的是Linux或已拥有以下任一项,请改为method=wget
或method=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")