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

Ric*_*ven 5 r data.table

我不太熟悉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)
Run Code Online (Sandbox Code Playgroud)

但是fread提供下载消息,我似乎无法将其关闭

showProgress = FALSE
Run Code Online (Sandbox Code Playgroud)

我可以用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
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这一点,我可以在fread论证中将其关闭吗?

它看起来像是在download.file某个地方发生的呼叫.为什么不fread以同样的方式阅读URL read.csv

Jer*_*myS 7

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

fread现在传递showProgress=FALSEdownload.file()as 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
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是因为fread在文件中进行了多次传递,首先获取结构,然后实际读取整个内容.保存下载多次.

  • @RichardScriven你是什么意思它伪装成一个URL.它是一个存在于远程服务器上的文件.`readLines`和`read.csv`都在下载文件.他们只是将它作为流处理(你必须能够在内存中读取整个内容). (2认同)