0

我正在尝试使用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 向量上自动执行这两个功能。

谢谢

4

1 回答 1

0

通常,当一个函数(无论是 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。如果它包含在返回数据中,那么您可以将其删除。

假设返回值始终是 a data.frame,那么您可以将它们保留在列表中(并将它们作为帧列表处理,参见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")

仅供参考, of 的第二个参数是一个函数,其中第一个参数由每个 from (first arg of )lapply填充。有时这个函数可以只是函数本身,如Xlapply

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

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

于 2021-02-25T17:47:14.350 回答