2015-07-09 4 views
1

У меня есть два файла данных с возвратом акций. Я пытаюсь применить одну и ту же функцию к обоим, но я получаю сообщение об ошибке для одного из них. Я хотел выяснить, что вызывает ошибку, поэтому я сравнил выход str для обоих XTS объектов и единственная линия, которая отличается является:Изменение индекса даты объекта xts

Indexed by objects of class: [POSIXct,POSIXt] TZ: # this object errors 
Indexed by objects of class: [Date] TZ: GMT  # this object works 

Есть ли способ изменить индексации дат в XTS объект, так что вывод str возвращается: Indexed by objects of class: [Date] TZ: GMT?

Я создал даты, используя: seq(as.Date("1963/07/01"), as.Date("2004/12/01"), by = "1 month",tzone="GMT").

Воспроизводимый пример:

library(xts) 
library("PerformanceAnalytics") 
load("https://dl.dropboxusercontent.com/u/22681355/data.Rdata") 
data(edhec) 
data2 <- as.xts(french1) 

Функции Я хочу назвать это Return.portfolio() с аргументом rebalance_on="months"

Return.portfolio(edhec["1997",1:10],rebalance_on="months") #this works 
Return.portfolio(data2["1976",1:10],rebalance_on="months") #this does not work 
+0

Можете ли вы предоставить [воспроизводимый пример] (http://stackoverflow.com/q/5963269/271616) и функцию, которая бросает ошибку? Если вы не можете предоставить функцию, бросающую ошибку, можете ли вы хотя бы сказать нам, что такое ошибка? Ваш текущий вопрос предполагает, что вы знаете причину ошибки, которая может быть неправильным допущением. –

+0

См. Мое редактирование. Теперь есть полный воспроизводимый пример. – user1984076

+0

Обычно функции 'is' возвращают логические, тогда как функции' as' действуют, чтобы принуждать объекты. –

ответ

0

xts:::as.xts.data.frame по умолчанию предполагает, что rownames вашего data.frame должен быть принужден к a POSIXct объект/индекс. Если вы хотите использовать другой класс, укажите его с помощью аргумента dateFormat= до as.xts.

> data2 <- as.xts(french1, dateFormat="Date") 
> str(data2) 
An ‘xts’ object on 1963-06-30/2004-11-30 containing: 
    Data: num [1:498, 1:10] -0.47 4.87 -1.68 2.66 -1.13 2.83 0.79 1.85 3.08 -0.45 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:10] "NoDur" "Durbl" "Manuf" "Enrgy" ... 
    Indexed by objects of class: [Date] TZ: UTC 
    xts Attributes: 
NULL 

Хотя я не убежден, что это является причиной любой ошибки вы столкнулись, потому что я не получаю сообщение об ошибке без указания dateFormat="Date".

> data2 <- as.xts(french1) 
> Return.portfolio(data2["1976",1:10],rebalance_on="months") 
      portfolio.returns 
1976-01-31   0.3980000 
1976-02-29   0.1017811 
1976-03-31   1.3408273 
1976-04-30  -11.7395151 
1976-05-31   8.0197492 
1976-06-30  -0.2550812 
1976-07-31   2.5732207 
1976-08-31   1.3784635 
1976-09-30  -1.6859705 
1976-10-31  -21.4958124 
1976-11-30   5.6863828 
1976-12-31  -7.8071966 
Warning message: 
In Return.portfolio(data2["1976", 1:10], rebalance_on = "months") : 
    weighting vector is null, calulating an equal weighted portfolio 
+0

странно, потому что без аргумента date в as.xts() Я получаю сообщение об ошибке, но после добавления dateformat = "Date" он запускается без ошибок. – user1984076

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