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

5

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

Ваш Ответ

1   ответ
2

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

Похожие вопросы