r语言 - 如何使用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

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

实际上,我试图以这种方式使用它——

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.

任何人都知道如何在 LARGE 向量上自动执行这两个功能。

谢谢

一般来说,当一个函数(无论是 API 到达还是本地)只接受一个元素作为参数时,通常最简单的"矢量化"方法是使用一种形式的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。如果它包含在返回数据中,则可以将其删除。

假设返回值始终是一个data.frame,那么您可以将它们保留在列表中(并将它们作为帧列表、c.f. https://stackoverflow.com/a/24376207/3358227)处理),或者您可以使用以下之一将它们组合成一个更高的帧:

# 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)

基本错误处理(如果您的 id/ref 查询失败):

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返回原始错误,有时有足够的信息
  • error=function(e) e同样的事情
  • error=function(e) conditionMessage(e)character返回,则消息部分的错误
  • error=function(e) NULL忽略错误,请改为返回NULL(或某个常量)

您还可以有条件地处理e,包括if (grepl("not found", e)) {...} else NULL等模式。

相关内容

  • 没有找到相关文章

最新更新