我正在尝试使用带有以下代码的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
我在做什么错了?
答案 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 = "")