r - 如何使用 Rblpapi 订阅功能创建数据框
问题描述
很抱歉,非彭博用户的人无法复制此示例。
对于其他人,我正在使用Rblpapi及其subscribe
功能。我想创建一个数据框、矩阵或数组之类的东西,并用订阅流式传输的值填充它。
假设您的 BBComm 组件已启动并正在运行,我的示例说:
require(Rblpapi)
con <- blpConnect()
securities <- c('SX5E 07/20/18 C3400 Index',
'SX5E 07/20/18 C3450 Index',
'SX5E 07/20/18 C3500 Index')
我想用这些字段填充一个 3 x 2 矩阵:
fields <- c('BID', 'ASK')
我想我可以创建一个这样的矩阵,几乎没有性能开销:
mat <- matrix(data = NA,
nrow = 3,
ncol = 2)
现在我使用subscribe
和它的参数fun
来填充目的,所以像这样(虽然看起来很难看并且可能效率低下):
i <- 1
subscribe(securities = securities,
fields = fields,
fun = function(x){
if (i > length(securities))
i <<- 1
tryCatch(
expr = {
mat[i, 1] <<- x$data$BID
mat[i, 2] <<- x$data$ASK
i <<- i + 1
},
error = function(e){
message(e)
},
finally = {}
)
})
结果:
Error in subscribe_Impl(con, securities, fields, fun, options, identity) :
Evaluation error: number of items to replace is not a multiple of replacement length.
当然,这不起作用,因为我真的不知道如何对流数据使用索引。$
运算符似乎可以按名称检索数据点 - 就像我对BID
and所做的那样ASK
- 但我无法找到一种方法来确定哪些值指的是,比如说,securities[1]
或securities[2]
. 似乎我得到了一个彼此无法区分的数值流,因为我无法检索证券中价值的所有权。
使用索引x$data$BID[1]
会引发相同的错误。
解决方案
好的,您的代码看起来不错,唯一不起作用的是x$data$BID
,更改为x$data["BID"]
然后您可以存储它,我正在使用您的代码,这是我的结果。
fields=c("TIME","LAST_PRICE", "BID", "ASK")
blpConnect()
blpConnect()
i <- 1
subscribe(securities = securities,
fields = fields,"interval=60",
fun = function(x){
if (i > length(securities))
i <<- 1
tryCatch(
expr = {
tim <- x$data["TIME"]
last <<- x$data["LAST_PRICE"]
ask <<- x$data["ASK"]
bid <<- x$data["BID"]
i <<- i + 1
},
error = function(e){
message(e)
},
finally = {}
)
print(cbind(tim$TIME,last$LAST_PRICE,ask$ASK, bid$BID))
})
结果
推荐阅读
- planning - PDDL - 使用solver.planning.domains 使用数字流利
- ruby - 将网站集从页面传递到布局 jekyll
- asp.net - 使用 msal.js 调用 web api 但在 asp.net webform 中失败
- jenkins - 神器jenkins插件的构建保留策略不会删除柯南包的所有文件
- node.js - NODE JS - 客户端网络套接字在建立安全 TLS 连接之前断开
- javascript - axios没有编译
- javascript - React js:我需要在 chrome 浏览器中打开文件而不是下载。例如:onclick docx、excel、pdf、zip 文件在推荐的应用程序中打开
- azure-devops - 在 Devops Azure 工作项中添加或修改工作流原因
- ios - 在展开可选值时意外发现 nil»错误
- sql - 将 SQL 脚本转换为 Tableau 计算表