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

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

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

<code>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
</code>

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

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

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

<code>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     
</code>
 SFun2809 мая 2012 г., 16:26
обновлено в посте
 SFun2809 мая 2012 г., 14:50
Вы правы насчет аварии v. Зависания. Я был драматичным. =) Я обновил заголовок. Спасибо за совет о sessionInfo ()!
 Joshua Ulrich09 мая 2012 г., 16:09
Не было так много "чаевых" так как это был «запрос информации». :)
 Joshua Ulrich09 мая 2012 г., 14:44
Выход изsessionInfo может помочь определить, почему это работало для вас в прошлом. Кроме того, "зависать" или "запереть" это не то же самое, что авария. В случае сбоя программа завершается. В любом случае, поведение нежелательно.
 SFun2809 мая 2012 г., 14:31
Кстати, я думаю, что это как-то связано с операцией подмножества, возвращающей объект zoo / xts вместо именованного числа. Возможно, раньше это работало для меня, потому что мои окружения были настроены так, что[ был угнан другой посылкой? В любом случае, это не объясняет аварию!

Ответы на вопрос(1)

Решение Вопроса

индексами. Арифметические операции всегда объединяются перед выполнением операции. Вам нужно использовать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]
 09 мая 2012 г., 20:44
@DWin: я знаю, я знаю. Но я действительно предпочел бы сказать: «Тогда не делай этого».
 SFun2809 мая 2012 г., 14:40
Я думаю, что это работало для меня в прошлом, потому что моя функция пакета конвертировала объекты xts в именованные числа через [. Я думаю, что это так, потому что функция не смогла найти [.zoo и откатилась на обычной старой матрице [. Так что что-то в моей среде, должно быть, изменилось так, что моя функция пакета теперь находит [.zoo. Имеет ли это смысл?
 09 мая 2012 г., 17:38
@JoshuaUlrich: кажется, что ошибкаshould сообщать, а не вызывать "зависание" который, по-видимому, требует перезагрузки и в основном является «аварийно-эквивалентным».

Ваш ответ на вопрос