在整洁的列表列表上运行函数

时间:2019-01-28 13:31:12

标签: r

我已经使用edgarWebR软件包下载了数据。

library(edgarWebR)

ticker <- c('NVDA', 'GOOG')
years <- 5

company.details <- lapply(ticker, company_details)

我有两个列表,我正在尝试对每个列表应用一个函数:

filing_doc <- function(href) {
  sapply(href, function(x) {
    filing_documents(x) %>%
      filter( type == "10-K" ) %>% select(href) }) %>%
    unlist(recursive = TRUE, use.names = FALSE)
}

我应用了功能

company.reports <- company.details$filings %>%
  filter(type == "10-K") %>%
  slice(1:years) %>% 
  mutate(doc.href = filing_doc(href),
         mdlink = paste0("[Filing Link](", href, ")"),
         reportLink = paste0("[10-K Link](", doc.href, ")")) %>%
  select(filing_date, accession_number, mdlink, reportLink, href, doc.href)

但是,这将不起作用,因为我试图将其应用于2列表。

以下作品

company.reports <- company.details[[1]]$filings %>%
  filter(type == "10-K") %>%
  slice(1:years) %>% 
  mutate(doc.href = filing_doc(href),
         mdlink = paste0("[Filing Link](", href, ")"),
         reportLink = paste0("[10-K Link](", doc.href, ")")) %>%
  select(filing_date, accession_number, mdlink, reportLink, href, doc.href)

在我刚将[[1]]添加到第一行的地方。我的问题是如何将相同的代码应用于多个列表-使用lapply和管道函数会遇到错误。

最终,我希望得到与最后一段代码相同的输出,但是要填充ticker中所有公司的信息。

1 个答案:

答案 0 :(得分:3)

检查此解决方案:

company.reports <-
  company.details %>%
  map(
    ~.x$filings %>%
      filter(type == "10-K") %>%
      slice(1:years) %>% 
      mutate(doc.href = filing_doc(href),
             mdlink = paste0("[Filing Link](", href, ")"),
             reportLink = paste0("[10-K Link](", doc.href, ")")) %>%
      select(filing_date, accession_number, mdlink, reportLink, href, doc.href)
  )