fread 不读取字符向量

fread does not read character vector

我正在尝试通过以下代码使用 R 下载列表:

name <- paste0("https://www.sec.gov/Archives/edgar/full-index/2016/QTR1/master.idx")
master <- readLines(url(name))
master <- master[grep("SC 13(D|G)", master)]
master <- gsub("#", "", master)
master_table <- fread(textConnection(master), sep = "|")

最后一行returns出错。我验证了 textConnection 按预期工作并且我可以使用 readLines 从它读取,但是 fread returns 一个错误。 read.table遇到同样的问题。

Error in fread(textConnection(master), sep = "|") :  input= must be a single character string containing a file name, a system command containing at least one space, a URL starting 'http[s]://', 'ftp[s]://' or 'file://', or, the input data itself containing at least one \n or \r

我做错了什么?

1) 第一行不需要paste。在下一行中,我们不需要 url(...)。此外,我们将输入限制为 1000 行以在更短的时间内说明示例。如果我们在fread中指定na.strings,我们可以省略gsub。还将输入折叠为单个字符串允许消除 fread.

中的 textConnection
library(data.table)

name <- "https://www.sec.gov/Archives/edgar/full-index/2016/QTR1/master.idx"
master <- readLines(name, 1000)
master <- master[grep("SC 13(D|G)", master)]
master <- paste(master, collapse = "\n")
master_table <- fread(master, sep = "|", na.strings = "")

2) 第二种可能更快的方法是先下载文件,然后 fread 如图所示。

name <- "https://www.sec.gov/Archives/edgar/full-index/2016/QTR1/master.idx"
download.file(name, "master.txt")
master_table <- fread('findstr "SC 13[DG]" master.txt', sep = "|", na.strings = "")

以上为Windows。对于 Linux 和 bash 将最后一行替换为:

master_table <- fread("grep 'SC 13[DG]' master.txt", sep = "|", na.strings = "")

我不太确定更广泛的上下文,特别是您是否需要使用 fread(),但是

s <- scan(text=master, sep="|", what=character())

效果很好,而且速度很快(0.1 秒)。

我想添加在 fread https://github.com/Rdatatable/data.table/issues/1423 中实现的最终解决方案。 也许这也可以为其他人节省一些时间。

所以解决方案变得更简单:

library(data.table)

name <- "https://www.sec.gov/Archives/edgar/full-index/2016/QTR1/master.idx"
master <- readLines(name, 1000)
master <- master[grep("SC 13(D|G)", master)]
master <- paste(master, collapse = "\n")
master_table <- fread(text = master, sep = "|")