2012-05-09 12 views
5

estoy usando la última versión de R/XTS/zoológico en Windows: R 2.15, 0,8-6 XTS, zoológico 1.7-7zoo/xts: ¿no se puede hacer matemática en subconjuntos de 1 celda? R cuelga

que estoy viendo el siguiente comportamiento extraño, que no era el caso con versiones anteriores:

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 

Aquí tengo un subconjunto de un objeto XTS a una sola celda. La resta ya no funciona. Además, la división hace que R se bloquee por completo.

¿Alguien más ve esto? ¿Es este un error conocido o me falta algo? Puedo reproducir esto en dos máquinas.

de información de sesión (algunos paquetes eliminados como confidencial):

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  
+0

Por cierto, creo que esto tiene algo que ver con la operación de subconjunto al devolver un objeto zoo/xts en lugar de un nombre numérico. Quizás esto solía funcionar para mí porque mi (s) entorno (s) estaba (n) configurado (s) de manera tal que el '[' estaba siendo secuestrado por otro paquete? De todas formas, ¡no explica el accidente! – SFun28

+0

La salida de 'sessionInfo' puede ayudar a determinar por qué esto funcionó para usted en el pasado. Además, un "bloqueo" o "bloqueo" no es lo mismo que un bloqueo. En un choque, el programa termina. De todos modos, el comportamiento no es deseable. –

+0

Tiene razón acerca de crash v. Hang. Estaba siendo dramático. =) Actualicé el título. Gracias por el consejo sobre sessionInfo()! – SFun28

Respuesta

2

Nunca se podía restar XTS/objetos zoológico con índices que no se superponen. Las operaciones aritméticas siempre se fusionan antes de realizar la operación. Debe usar coredata para que la resta que haya escrito proporcione el resultado esperado.

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

puedo replicar la segunda cuestión, pero no estoy seguro de que esto debe ser una alta prioridad para arreglar, porque no encaja en el zoo/XTS idioma y resultaría en un objeto XTS completamente vacío. Todo está bien si (algunos de) los índices se alinean.

(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] 
+0

Creo que esto funcionó para mí en el pasado porque mi función de paquete consistía en convertir objetos xts en números numéricos con [. Creo que este es el caso porque la función no pudo encontrar [.zoo y repliegue en la matriz antigua normal [. Así que algo sobre mi entorno debe haber cambiado de tal manera que mi función de paquete ahora encuentre [.zoo. ¿Tiene sentido? – SFun28

+0

@JoshuaUlrich: Parece que se debe informar un error _ en lugar de provocar un "bloqueo", lo que parece requerir un reinicio y básicamente es un "equivalente de bloqueos". –

+0

@DWin: Lo sé, lo sé. Pero preferiría decir, "entonces no hagas eso". –

Cuestiones relacionadas