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)
}
###################################################
-----Original Message-----
From: roger at bergande.ch [mailto:roger at bergande.ch]
Sent: Dienstag, 20. Januar 2009 16:36
To: Bergande Roger (FI/RM)
Subject: Fwd: [R-SIG-Finance] Problem with RBloomberg retval argument
----- Weitergeleitete Nachricht von sergeyg at gmail.com -----
Datum: Mon, 19 Jan 2009 17:24:32 +0100
Von: Sergey Goriatchev <sergeyg at gmail.com>
Antwort an: Sergey Goriatchev <sergeyg at gmail.com>
Betreff: [R-SIG-Finance] Problem with RBloomberg retval argument
An: r-sig-finance at stat.math.ethz.ch
Hello everyone,
I have two issues that I want to ask.
1)
I have problems with loading data with RBloomberg.
More precisely, I do not seem to be able to load data into a data.frame.
I get an error message:
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")
Error in if (typ[n] == "character") { : argument is of length zero
What does that error message mean and what can I do to avoid this
error message?
2)
If I load data from Bloomberg in matrix format, the date is converted
to a number. For example:
bldata <- blpGetData(conn, "ED4 Comdty", "PX_LAST", start=start.date, end=end.date, retval="matrix") head(bldata)
[DATETIME] PX_LAST [1,] 32892 91.36 [2,] 32895 91.37 [3,] 32896 91.38 [4,] 32897 91.38 [5,] 32898 91.34 [6,] 32899 91.28 I tried to convert the number to normal date and by trial and error I found the following:
as.Date(32892, "1899-12-30")
[1] "1990-01-19" Is it really true that count starts from December 30th 1899? Why? Thank you in advance for your help! Regards, Sergey
_______________________________________________ R-SIG-Finance at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. -- If you want to post, subscribe first. ----- Ende der weitergeleiteten Nachricht -----