试图在.csv文件上使用fread()但是获取内部错误“ch> eof”

问题描述 投票:1回答:3

我从fread得到一个错误:

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

尝试使用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") 
r data.table fread
3个回答
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)

2
投票

fread()现在使用curl包下载文件。这似乎工作得很好:

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

0
投票

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

fileURL <- "http://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06pid.csv"
download.file(fileURL, "Idaho2006.csv") 
© www.soinside.com 2019 - 2024. All rights reserved.