使用`lapply`获得多个下载/结果

时间:2019-02-01 10:08:57

标签: r lapply

我有以下内容:

library(edgar)
setwd() 
years <- c(2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018)
masterIndex <- lapply(years, getMasterIndex)

哪个会创建两个文件来下载数据-并下载索引。

我还可以使用以下内容:

NVDA  <- getFilings(2018, 0001045810, '10-K')

将为我获得2018年“ NVDA”的结果,数字0001045810对应于NVDA公司。

我也可以写:

msft <- getFilings(2018, 000789019, '10-K')

将获得Microsoft的数据。

我有这些公司的媒介,例如:

companies <- c("789019", "1045810")

所以我想lapply遍历此向量,并获取其中的所有公司。

我还想将相同的lapply应用于不同的年份,即上述years向量中的所有年份。

我该怎么做?软件包还询问:

Total number of filings to be downloaded=1. Do you want to download (yes/no)? yes

我必须写yes-有没有办法为代码中的所有代码“选择”是?

我的问题是如何使用lapply来获取每年的公司列表NVDAMicrosoft等?

即一个清单用于2018年,另一个清单用于2017年,等等。

1 个答案:

答案 0 :(得分:1)

我们可以创建一个函数来获取数据并在此处使用outer

library(edgar)
years <- c(2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018)
companies <- c("789019", "1045810")

get_data <- function(x, y) getFilings(x, y, '10-K')

outer(years, companies, Vectorize(get_data))

在这里,我假设您要为所有10-K form.type下载数据。


由于options(needs.promptUser = FALSE)不起作用,我们可以使用@Weihuang Wong here给出的代码自动下载所有内容

x <- capture.output(dput(getFilings))
x <- gsub("choice <- .*", "cat(paste(msg3, '\n')); choice <- 'yes'", x)
x <- gsub("^function", "my_getFilings <- function", x)
writeLines(x, con = tmp <- tempfile())
source(tmp)

,然后在my_getFilings中呼叫get_data

get_data <- function(x, y) my_getFilings(x, y, '10-K')

outer(years, companies, Vectorize(get_data))