Skip to content

Problem with RBloomberg retval argument

1 message · roger at bergande.ch

#
Hello Sergey

There seems to be a small bug in the function which returns the data.frame.

To fix it simply save the following function in a file and source it  
after you load library(RBloomberg)

It works at least on my machine.

Regards,
Roger

#######################################################
rm(list=ls(all=TRUE))
library(RBloomberg)
source("H:/ROGB/downloads/Rsource/RBloomberg/R/as.data.frame.R")

.bbfields <- blpReadFields(path = "C:/Program Files/blp/API")

start.date 	<- as.chron("1990-01-19")
end.date	<- as.chron("2009-01-19")

conn <- blpConnect(show.days="week", na.action="na", periodicity="daily")

bldata <- blpGetData(conn, c("ED4 Comdty", "ED12 Comdty") ,"PX_LAST",  
start=start.date, end=end.date, retval="data.frame")

#########################################################

as.data.frame.BlpCOMReturn <- function(x, row.names = NULL, optional =
                                        FALSE){
   bbfields <- .bbfields
   lst <- list()
   mtx <- as.matrix.BlpCOMReturn(x)
   cols <- colnames(mtx)
   flds <- attr(x, "fields")
   secs <- attr(x, "securities")
   blds <- attr(x, "barfields")
   ndat <- attr(x, "num.of.date.cols")
   ## if date column exists, convert it to chron
   if(ndat != 0){
     dtime <- as.chron.COMDate(mtx[,1])
     mtx <- matrix(mtx[, 2:ncol(mtx)], ncol=ncol(mtx) - 1)
   }
   ## convert all other columns to appropriate datatype
   if(!is.null(blds)){
     fields <- blds
   }else{
     fields <- flds
   }
   ####################### fix ############################################
   typTmp <- dataType(fields, bbfields)
   typ <- rep(typTmp,length(secs))
   ########################################################################
   for(n in seq(1, ncol(mtx))){
     # n = 2
     vec <- mtx[,n]
     if(typ[n] == "character"){
       lst <- append(lst, list(as.character(vec)))
     }else if(typ[n] == "double"){
       lst <- append(lst, list(as.numeric(vec)))
     }else if(typ[n] == "logical"){
       lst <- append(lst, list(as.logical(vec)))
     }else if(typ[n] == "chron"){
       lst <- append(lst, list(as.chron(vec)))
     }
   }
   if(ndat != 0){
     lst <- append(list(dtime), lst)
     df <- as.data.frame.list(lst)
     colnames(df) <- cols
   }else{
     df <- as.data.frame.list(lst)
     colnames(df) <- flds
     rownames(df) <- secs
   }
   return(df)
}

###################################################