如何使用edgarWebR获取多个公司的信息
How to get more than one company's information using edgarWebR
我正在尝试使用 edgarWebR
包从 EDGAR 获取公司及其备案信息。特别是,我想使用包中的两个函数 - filing_information
和 company_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)
是一个character
return,报错部分
error=function(e) NULL
忽略错误,return NULL
(或某个常量)改为
你也可以有条件地对待e
,包括if (grepl("not found", e)) {...} else NULL
.
等模式
我正在尝试使用 edgarWebR
包从 EDGAR 获取公司及其备案信息。特别是,我想使用包中的两个函数 - filing_information
和 company_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)
是一个character
return,报错部分error=function(e) NULL
忽略错误,returnNULL
(或某个常量)改为
你也可以有条件地对待e
,包括if (grepl("not found", e)) {...} else NULL
.