如何使用Rblpapi subscribe函数创建数据帧

如何使用Rblpapi subscribe函数创建数据帧,r,rblpapi,R,Rblpapi,很抱歉,这个例子不会被那些不是彭博社用户的人复制 对于其他人,我正在使用和它的功能。我想创建数据帧、矩阵或数组之类的东西,并用订阅流式传输的值填充它 假设您的BBComm组件已启动并运行,我的示例显示: require(Rblpapi) con <- blpConnect() securities <- c('SX5E 07/20/18 C3400 Index', 'SX5E 07/20/18 C3450 Index', 'SX5E 0

很抱歉,这个例子不会被那些不是彭博社用户的人复制

对于其他人,我正在使用和它的功能。我想创建数据帧、矩阵或数组之类的东西,并用订阅流式传输的值填充它

假设您的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')
结果:

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
所做的那样—但我找不到一种方法来确定哪些值是指证券[1]或证券[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))
      })
fields=c(“时间”、“上次价格”、“出价”、“询问”)
blpConnect()
blpConnect()
i(证券)

i从
subscribe
函数查看结果对象的一个好方法是:

subscribe(securities=c("AAPL US Equity"),
          fields=c("LAST_PRICE"),
          fun=function(x) print(str(x)))
从那里,您可以进入数据:

subscribe(securities=c("AAPL US Equity", "INTC US Equity"),
          fields=c("LAST_PRICE","BID","ASK"),
          fun=function(x) {
            if (!is.null(x$data$MKTDATA_EVENT_TYPE) && x$data$MKTDATA_EVENT_TYPE == "TRADE" && exists("LAST_PRICE", where = x$data)) {
              print(data.frame(Ticker = x$topic, DateTime = x$data$TRADE_UPDATE_STAMP_RT, Trade = x$data$LAST_PRICE))
            }
          })

我只在这里打印了data.frame。可以使用subscribe的有趣参数直接处理或存储数据。

谢谢您的帮助。您的示例是可行的,但从输出中,我无法推断当前由
print
显示的安全性:是否有任何字段具有安全名称,或者我是否被迫调用具有某种标识符(如安全简称)的其他字段?您应该向Rblpapi团队提交功能请求。或者,作为黑客,在docker容器中为每个库存运行一个单独的R会话-虽然不理想。。。
     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))
      })
subscribe(securities=c("AAPL US Equity"),
          fields=c("LAST_PRICE"),
          fun=function(x) print(str(x)))
subscribe(securities=c("AAPL US Equity", "INTC US Equity"),
          fields=c("LAST_PRICE","BID","ASK"),
          fun=function(x) {
            if (!is.null(x$data$MKTDATA_EVENT_TYPE) && x$data$MKTDATA_EVENT_TYPE == "TRADE" && exists("LAST_PRICE", where = x$data)) {
              print(data.frame(Ticker = x$topic, DateTime = x$data$TRADE_UPDATE_STAMP_RT, Trade = x$data$LAST_PRICE))
            }
          })