如何使用edgarWebR获取多个公司的信息

How to get more than one company's information using edgarWebR

我正在尝试使用 edgarWebR 包从 EDGAR 获取公司及其备案信息。特别是,我想使用包中的两个函数 - filing_informationcompany_filings.

实际上我在不同的数据集中有数千个 cik,但是上面的两个函数都无法处理 cik 的向量。这是一个例子-

library(edagrWebR)
comp_file <- company_filings(c("1000045"), before = "20201231",
                            type = "10-K",  count = 100,
                            page = 1)

head(comp_file)
  accession_number act file_number filing_date accepted_date
1             <NA>  34   000-26680  2020-06-22    2020-06-22
2             <NA>  34   000-26680  2019-06-28    2019-06-28
3             <NA>  34   000-26680  2018-06-27    2018-06-27
4             <NA>  34   000-26680  2017-06-14    2017-06-14
5             <NA>  34   000-26680  2016-06-14    2016-06-14
6             <NA>  34   000-26680  2015-06-15    2015-06-15
                                                                                               href
1 https://www.sec.gov/Archives/edgar/data/1000045/000156459020030033/0001564590-20-030033-index.htm
2 https://www.sec.gov/Archives/edgar/data/1000045/000156459019023956/0001564590-19-023956-index.htm
3 https://www.sec.gov/Archives/edgar/data/1000045/000119312518205637/0001193125-18-205637-index.htm
4 https://www.sec.gov/Archives/edgar/data/1000045/000119312517203193/0001193125-17-203193-index.htm
5 https://www.sec.gov/Archives/edgar/data/1000045/000119312516620952/0001193125-16-620952-index.htm
6 https://www.sec.gov/Archives/edgar/data/1000045/000119312515223218/0001193125-15-223218-index.htm
  type film_number
1 10-K    20977409
2 10-K    19927449
3 10-K    18921743
4 10-K    17910577
5 10-K   161712394
6 10-K    15931101
                                               form_name
1 Annual report [Section 13 and 15(d), not S-K Item 405]
2 Annual report [Section 13 and 15(d), not S-K Item 405]
3 Annual report [Section 13 and 15(d), not S-K Item 405]
4 Annual report [Section 13 and 15(d), not S-K Item 405]
5 Annual report [Section 13 and 15(d), not S-K Item 405]
6 Annual report [Section 13 and 15(d), not S-K Item 405]
  description  size
1        <NA> 14 MB
2        <NA> 10 MB
3        <NA>  5 MB
4        <NA>  5 MB
5        <NA>  5 MB
6        <NA>  7 MB

我需要在 filing_information 函数中使用 href 变量。

其实我试过这样用的-

file_info <- filing_information(comp_file$href) 

但它不起作用。我收到这条消息 -


Error in parse_url(url) : length(url) == 1 is not TRUE

我实际上可以通过如下方式放置每个 href 变量值来做到这一点

x <- "https://www.sec.gov/Archives/edgar/data/1000045/000156459020030033/0001564590-20-030033-index.htm"

file_info <- filing_information(x)

company_filings 函数也是如此,我只使用一个 cik - “1000045”,但在另一个文件中我有数千个 cik想要运行的company_filings功能。手动是不可能的,因为我有数千个 cik.

任何人都知道我如何在一个大向量上自动执行这两个函数。

谢谢

一般来说,当一个函数(无论是 API-reaching 还是局部函数)只接受一个元素作为参数时,通常最简单的“向量化”方法是使用 lapply:

companies <- c("1000045", "1000046", "1000047")
comp_file_list <- lapply(
  setNames(nm=companies),
  function(comp) company_filings(comp, before = "20201231",
                                 type = "10-K",  count = 100,
                                 page = 1)
)

从技术上讲,setNames(nm=.) 部分是一种保护措施,让我们知道每个元素使用了哪个公司 ID。如果它包含在 return 数据中,那么您可以将其删除。

假设 return 值始终是 data.frame,那么您可以将它们保留在列表中(并将它们作为帧列表处理,c.f。, ),或者您可以使用以下方法之一将它们组合成一个更高的框架:

# base R
comp_files <- Map(function(x, nm) transform(x, id = nm), comp_files, names(comp_files))
comp_files <- do.call(rbind, comp_files_list)

# dplyr/tidyverse
comp_files <- dplyr::bind_rows(comp_files_list, .id = "id")

# data.table
comp_files <- data.table::rbindlist(comp_files, idcol = "id")

仅供参考,lapply 的第二个参数是一个函数,其中第一个参数填充了 X 中的每个参数(lapply 的第一个参数)。有时这个函数可以只是函数本身,如

res <- lapply(companies, company_filings)

这相当于

res <- lapply(companies, function(z) company_filings(z))

如果您只有一组必须应用于所有调用的参数,您可以选择以下等效表达式之一:

res <- lapply(companies, company_filings, before = "20201231", type = "10-K",  count = 100, page = 1)
res <- lapply(companies, function(z) company_filings(z, before = "20201231", type = "10-K",  count = 100, page = 1))

但是,如果这些参数中的一个(或多个)因每个公司而异,则您需要不同的表格。假设我们对每家公司有不同的 before= 参数,

befores <- c("20201231", "20201130", "20201031")
res <- Map(function(comp, bef) company_filing(comp, before=bef, type="10-K"),
           companies, befores)

基本错误处理,如果您有 ids/refs 查询失败:

res <- lapply(comp, function(cmp) {
  tryCatch(
    company_filing(cmp, before=".."),
    error = function(e) e
  )
})
errors <- sapply(res, inherits, "error")
failures <- res[errors]
successes <- res[!errors]
good_returns <- do.call(rbind, success)

names(failures)
# indicates which company ids failed, and the text of the error may
# indicate why they failed

tryCatch(..., error=) 参数的一些选项:

  • error=identity returns 原始错误,有时信息足够
  • error=function(e) e 一样
  • error=function(e) conditionMessage(e)是一个characterreturn,报错部分
  • error=function(e) NULL 忽略错误,return NULL(或某个常量)改为

你也可以有条件地对待e,包括if (grepl("not found", e)) {...} else NULL.

等模式