很抱歉,这个例子不能被那些不是Bloomberg用户的人复制。
对于其他的,我使用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和ASK所做的那样-但我找不到一种方法来确定哪些值引用的是securities[1]还是securities[2]。似乎我得到了一个相互无法区分的数值流,因为我无法在证券中检索这些值的所有权。
在x$data$BID[1]上使用索引会抛出相同的错误。
https://stackoverflow.com/questions/51248029
复制相似问题