如何通过 Bloomberg Rblpapi 包正确使用 lapply 来提取多组代码
How to use lapply correctly with Bloomberg Rblpapi package to pull multiple groups of tickers
我不确定这是 lapply 问题还是关于 Rblpapi 语法的问题。 Rblpapi 是一个很棒的包,用于通过 R 从 bloomberg 中提取数据。
因为不是每个人都可以访问 bloomberg,而且涉及很多代码,这使得提供可重现的示例更具挑战性,因此希望有人可以提供没有 reprex 的解决方案。
当我使用下面的代码时,可以成功拉取我想要的数据:
library(Rblpapi)
library(tidyverse)
# Connect to Bloomberg --------------------------------------------------------------------
blpConnect()
# Specify beginning and end dates
beg_date <- as.Date("1927-12-30", format = "%Y-%m-%d")
end_date <- Sys.Date()
# Specify Bloomberg field to pull
my_field <- "PX_LAST"
# Call ticker script to load tickers
source(file.path(my_path, "tickers.R"), echo = FALSE)
# Create function to pull Bloomberg data
pull_fx <- function(input_tickers, input_field) {
df <- as.data.frame(
bdh(
input_tickers,
input_field,
start.date = beg_date,
end.date = end_date,
include.non.trading.days = TRUE
)
)
}
# Pull data
rates_level_df <- pull_fx(rates_tickers_level, my_field)
equity_level_us_df <- pull_fx(equity_tickers_us_level, my_field)
当我尝试提取所有代码的数据时,我不必为每组代码重复 pull_fx(tickers_here, my_field)
代码,我试过这个:
list_df <- lapply(tickers_all, pull_fx, input_field = my_field)
其中 tickers_all
是包含所有代码分组的字符向量(例如,“rates_tickers_level”)。我为每个代码集合返回了一个数据框列表,但列表中的每个数据框都是空的。结果,我无法判断我是在错误地使用 lapply 还是在 bdh 命令(Rblpapi 包)中使用 lapply 提供了错误的语法。
我期待的输出是一个数据帧列表,其中包含为每组代码提取的数据(即“rates_level_df”、“equity_level_us_df”等数据帧包含在 tickers_all 字符向量中。
感谢帮助!
尝试将 mget
与 tickers_all
结合使用
list_df <- lapply(mget(tickers_all), pull_fx, input_field = my_field)
要理解为什么我们需要 mget
考虑这个简单的例子
a <- 1
b <- 2
tmp <- c('a', 'b')
tmp
#[1] "a" "b"
tmp
有变量 a
和 b
,它们作为字符串存储在其中。要获取存储在 a
和 b
中的值 1 和 2,我们需要 mget
.
mget(tmp)
#$a
#[1] 1
#$b
#[1] 2
我不确定这是 lapply 问题还是关于 Rblpapi 语法的问题。 Rblpapi 是一个很棒的包,用于通过 R 从 bloomberg 中提取数据。
因为不是每个人都可以访问 bloomberg,而且涉及很多代码,这使得提供可重现的示例更具挑战性,因此希望有人可以提供没有 reprex 的解决方案。
当我使用下面的代码时,可以成功拉取我想要的数据:
library(Rblpapi)
library(tidyverse)
# Connect to Bloomberg --------------------------------------------------------------------
blpConnect()
# Specify beginning and end dates
beg_date <- as.Date("1927-12-30", format = "%Y-%m-%d")
end_date <- Sys.Date()
# Specify Bloomberg field to pull
my_field <- "PX_LAST"
# Call ticker script to load tickers
source(file.path(my_path, "tickers.R"), echo = FALSE)
# Create function to pull Bloomberg data
pull_fx <- function(input_tickers, input_field) {
df <- as.data.frame(
bdh(
input_tickers,
input_field,
start.date = beg_date,
end.date = end_date,
include.non.trading.days = TRUE
)
)
}
# Pull data
rates_level_df <- pull_fx(rates_tickers_level, my_field)
equity_level_us_df <- pull_fx(equity_tickers_us_level, my_field)
当我尝试提取所有代码的数据时,我不必为每组代码重复 pull_fx(tickers_here, my_field)
代码,我试过这个:
list_df <- lapply(tickers_all, pull_fx, input_field = my_field)
其中 tickers_all
是包含所有代码分组的字符向量(例如,“rates_tickers_level”)。我为每个代码集合返回了一个数据框列表,但列表中的每个数据框都是空的。结果,我无法判断我是在错误地使用 lapply 还是在 bdh 命令(Rblpapi 包)中使用 lapply 提供了错误的语法。
我期待的输出是一个数据帧列表,其中包含为每组代码提取的数据(即“rates_level_df”、“equity_level_us_df”等数据帧包含在 tickers_all 字符向量中。
感谢帮助!
尝试将 mget
与 tickers_all
list_df <- lapply(mget(tickers_all), pull_fx, input_field = my_field)
要理解为什么我们需要 mget
考虑这个简单的例子
a <- 1
b <- 2
tmp <- c('a', 'b')
tmp
#[1] "a" "b"
tmp
有变量 a
和 b
,它们作为字符串存储在其中。要获取存储在 a
和 b
中的值 1 和 2,我们需要 mget
.
mget(tmp)
#$a
#[1] 1
#$b
#[1] 2