zoo/xts - не может выполнять математику на подмножествах с 1 ячейкой? R зависает

Я использую последнюю версию R/xts/zoo в Windows: R 2.15, xts 0.8-6, zoo 1.7-7.

Я вижу следующее странное поведение, которого не было в предыдущих версиях:

library(xts)
data(sample_matrix)
sample.xts <- as.xts(sample_matrix)

sample.xts[1, 2] - sample.xts[2,2]     # results in numeric(0)?!?!?!
(sample.xts[ 1, 2] - sample.xts[2,2])/sample.xts[3,1]  # if I run this twice R locks up

Здесь я подмножил объект XTS в одну ячейку. Вычитание больше не работает. Кроме того, деление приводит к полной блокировке R.

Кто-нибудь еще это видит? Это известная ошибка или я что-то упустил? Я могу воспроизвести это на двух машинах.

Информация о сеансе (несколько пакетов удалены как конфиденциальные):

R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] parallel  stats     graphics  utils     datasets  grDevices methods   base     

person SFun28    schedule 09.05.2012    source источник
comment
Кстати, я думаю, что это как-то связано с операцией подмножества, возвращающей объект zoo/xts вместо именованного числового. Возможно, это работало для меня, потому что моя среда (среды) была настроена так, что [ был захвачен другим пакетом? В любом случае, это не объясняет катастрофу!   -  person SFun28    schedule 09.05.2012
comment
Выходные данные sessionInfo могут помочь определить, почему это сработало для вас в прошлом. Кроме того, зависание или блокировка — это не то же самое, что сбой. При сбое программа завершает работу. В любом случае такое поведение нежелательно.   -  person Joshua Ulrich    schedule 09.05.2012
comment
Вы правы насчет сбоя и зависания. Я драматизировал. =) Я обновил заголовок. Спасибо за подсказку о sessionInfo()!   -  person SFun28    schedule 09.05.2012
comment
Это был не столько «совет», сколько «запрос информации». :)   -  person Joshua Ulrich    schedule 09.05.2012
comment
Исправлено зависание/вылет в xts на R-forge.   -  person Joshua Ulrich    schedule 18.06.2012


Ответы (1)


Вы никогда не сможете вычесть объекты xts/zoo с неперекрывающимися индексами. Арифметические операции всегда объединяются перед выполнением операции. Вам нужно использовать coredata, чтобы написанное вами вычитание дало ожидаемый результат.

coredata(sample.xts[1,2]) - coredata(sample.xts[2,2])

Я могу воспроизвести вторую проблему, но я не уверен, что ее исправление должно иметь высокий приоритет, потому что это не соответствует идиоме zoo/xts и приведет к совершенно пустому объекту xts. Все в порядке, если (некоторые) индексы совпадают.

(sample.xts[1,2] - sample.xts[1,3]) / sample.xts[1,4]
(sample.xts[2,2] - sample.xts[1:2,3]) / sample.xts[2:3,4]
person Joshua Ulrich    schedule 09.05.2012
comment
Я думаю, что это работало для меня в прошлом, потому что моя функция пакета преобразовывала объекты xts в именованные числовые значения через [. Я думаю, что это так, потому что функция не смогла найти [.zoo и вернулась к обычной старой матрице [. Итак, что-то в моей среде должно было измениться, так что моя функция пакета теперь находит [.zoo. Имеет ли это смысл? - person SFun28; 09.05.2012
comment
@JoshuaUlrich: Кажется, что ошибка следует сообщаться, а не вызывать зависание, которое, казалось бы, требует перезапуска и в основном эквивалентно сбою. - person IRTFM; 09.05.2012
comment
@DWin: Я знаю, я знаю. Но я действительно предпочел бы сказать, тогда не делайте этого. - person Joshua Ulrich; 09.05.2012