2013-05-31 6 views
3
con = gzcon(url('http://www.systematicportfolio.com/sit.gz', 'rb')) 
source(con) 
close(con) 
load.packages("TTR,PerformanceAnalytics,quantmod,lattice") 

####################################################### 
#Get and Prep Data 
####################################################### 
data <- new.env() 
tickers<-spl("VTI,IEF,TLT,DBC,VNQ,GLD") 

getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data) 
for(i in ls(data)) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=TRUE) 

bt.prep(data, align='remove.na', dates='1990::2013') 

У меня возникает проблема вычитания определенного столбца из объекта xts.Вычитание объекта xts из подмножества объекта xts

prices = data$prices 
ret = prices/mlag(prices) - 1 
ret - ret[,3] #subtract column three from every other column don't seem to work 

Есть ли быстрое решение?

Я пробовал:

apply(ret,2,function(x) x - x[,3]) #doesn't seem to work 

Есть идеи?

+0

SIT использует объект XTS для переноса временных рядов, поэтому я не думаю, что это было бы проблемой. Если вы выполняете str (ret), его объект xts. – user1234440

+0

SIT охватывает временные ряды с объектом XTS. Вышеприведенный пример просто загружает данные и SIT обертывает его вокруг объекта XTS. Но теперь я отредактирую его для «минимальной» версии. – user1234440

+0

Вот что-то немного «apply»-like: 'sweep (x, 1, x [, 3])' – GSee

ответ

3

В следующий раз, пожалуйста, укажите минимальный воспроизводимый пример. Например:

> library(xts) 
> data(sample_matrix) 
> x <- as.xts(sample_matrix) 
> x-x[,1] 
Error in `-.default`(x, x[, 1]) : non-conformable arrays 
> apply(x, 2, function(y) y-x[,1]) 
Error in array(ans, c(len.a%/%d2, d.ans), if (!all(vapply(dn.ans, is.null, : 
    length of 'dimnames' [1] not equal to array extent 

Проблема заключается в том, что XTS объекты имеют атрибут dim по умолчанию, и он не упал, когда Подменю, как это с матричными и класса зоопарка объектов. Вы можете принудительно сбросить его, установив drop=TRUE в свой поднабор.

> head(x-x[,1,drop=TRUE]) 
      Open  High   Low  Close 
2007-01-02 0 0.07799532 -0.08936727 0.07799532 
2007-01-03 0 0.19137980 0.00000000 0.16717014 
2007-01-04 0 0.00000000 -0.15681864 -0.08859811 
2007-01-05 0 0.00000000 -0.15243423 -0.03887316 
2007-01-06 0 0.00000000 -0.13311797 -0.06320448 
2007-01-07 0 0.08349916 -0.14025780 -0.14025780 

Это работает потому, что x[,1,drop=TRUE] возвращает «Вектор XTS» (т.е. безразмерная XTS объект) и вектор возвращают вдоль x во время - вызова.

Смежные вопросы