data.table 的 fread() 给出不需要的下载消息

Posted

技术标签:

【中文标题】data.table 的 fread() 给出不需要的下载消息【英文标题】:data.table's fread() giving unwanted download message 【发布时间】:2014-07-24 02:33:42 【问题描述】:

我对 data.table 的 fread 函数不太熟悉,但它可以快速读取我的数据,所以现在我很感兴趣。在 URL "http://www.retrosheet.org/CurrentNames.csv",有一个简单的 csv 文件。以下两个调用工作正常。

readLines("http://www.retrosheet.org/CurrentNames.csv", n = 2)
# [1] "ANA,LAA,AL,,Los Angeles,Angels,,4/11/1961,9/1/1965,Los Angeles,CA"
# [2] "ANA,CAL,AL,,California,Angels,,9/2/1965,9/29/1968,Anaheim,CA"
rcsv <- read.csv("http://www.retrosheet.org/CurrentNames.csv", header = FALSE)

但是fread 正在发送下载消息,我似乎无法用

关闭它
showProgress = FALSE

我可以使用suppressMessages(),但我并不想这样做。

library(data.table)
dtf <- fread("http://www.retrosheet.org/CurrentNames.csv", 
             header = FALSE, showProgress = FALSE)
# trying URL 'http://www.retrosheet.org/CurrentNames.csv'
# Content type 'text/plain' length 7729 bytes
# opened URL
# ==================================================
# downloaded 7729 bytes

谁能解释一下,我可以在fread 参数中将其关闭吗?

似乎在某处发生了对download.file 的调用。为什么fread 不能像read.csv 一样读取URL?

【问题讨论】:

:) 你如何想象你可以“直接从 URL 读取”而不是下载?但是如果showProgressFALSE,则将quiet=TRUE 添加到download.file 是一个很好的FR - 你应该将它添加到github。 @eddi - 这有点讽刺,我们昨天进行了那次谈话。 :) 但我也认为quiet = TRUE 选项将是fread 的一个很好的补充。老实说,我并不精通内存、存储、远程服务器等。我只是喜欢棒球和 R,所以我正在编写一种“边走边学”的软件包。 Feature request 提交 @MattDowle - 非常感谢!! 【参考方案1】:

2014 年 10 月更新。现在在 v1.9.5 中:

fread 现在将showProgress=FALSE 传递给download.file() 作为quiet=!showProgress。感谢 Karl Broman 和 Richard Scriven 提交问题的拉取请求,#741。


上一个答案...

它确实会下载文件,这是执行它的代码部分。

else if (substring(input, 1, 7) %chin% c("http://", "https:/", 
    "file://")) 
    tt = tempfile()
    on.exit(unlink(tt), add = TRUE)
    download.file(input, tt)
    input = tt

我猜这是因为 fread 对文件进行了多次传递,首先是获取结构,然后实际读取整个内容。节省了多次下载。

【讨论】:

我们需要的是一个quiet = TRUE 传递给download.file 嗯,你可以试试***.com/questions/2458013/… 我想我可以编辑它并称它为别的东西。我将在几个包函数中使用它,所以我可能需要保持原样。 @RichardScriven 伪装成 URL 是什么意思。它是一个存在于远程服务器上的文件。 readLinesread.csv 也在下载该文件。他们只是将其作为流处理(您必须能够在内存中读取整个内容)。

以上是关于data.table 的 fread() 给出不需要的下载消息的主要内容,如果未能解决你的问题,请参考以下文章

使用包 data.table 中的 fread 一次读取块

来自 data.table 包的 fread 无法读取小数字

R data.table v1.9.6 中的错误 - 函数“fread”

data.table fread 可以接受连接吗?

使用 data.table (with fread) 快速读取和组合多个文件

data.table fread错误 - gzip文件 - 设置临时目录