fread不读取字符向量

时间:2018-10-26 13:35:04

标签: r data.table fread read.table

我正在尝试使用带有以下代码的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 = "|")

最后一行返回错误。我验证了textConnection可以正常工作,并且可以使用readLines从中读取内容,但是fread返回了错误。 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

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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。对于使用bash的Linux,将最后一行替换为:

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