Фред не читает символьный вектор - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь загрузить список, используя 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 голосов
/ 26 октября 2018

Я не совсем уверен в более широком контексте, в частности, нужно ли вам использовать fread(), но

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

работает хорошо и быстро (0,1 секунды).

0 голосов
/ 26 октября 2018

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. Для Linux с bash замените последнюю строку на:

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