动物园/xts - 无法对1个单元格的子集进行数学运算?R卡住了

5

我正在使用Windows上的最新版本R/xts/zoo: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     

顺便说一下,我认为这与子集操作返回一个动物园/xts对象而不是命名数字有关。也许这以前对我起作用是因为我的环境设置使[被另一个包劫持了?无论如何,这并不能解释崩溃! - Suraj
sessionInfo 的输出可能有助于确定为什么过去这对您起作用。此外,“挂起”或“锁定”与崩溃不同。在崩溃中,程序终止。无论如何,这种行为都是不可取的。 - Joshua Ulrich
你关于崩溃和挂起的观点是正确的。我只是有些夸张了。=)我已经更新了标题。感谢你提供sessionInfo()的提示! - Suraj
这不是太像“小费”,而更像是“请求信息”。 :) - Joshua Ulrich
在R-forge上,xts的挂起/崩溃问题已经得到解决。 - Joshua Ulrich
1个回答

2

你不能用非重叠的索引减去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]

我认为这在过去对我起作用是因为我的包函数通过[.]将xts对象转换为命名数字。我认为这是因为该函数找不到[.zoo]并回退到常规旧矩阵[.]。所以我的环境中的某些东西一定发生了变化,以至于我的包函数现在能够找到[.zoo]。这有意义吗? - Suraj
@JoshuaUlrich:看起来应该报告一个错误,而不是引起“挂起”,这似乎需要重新启动并基本上相当于“崩溃”。 - IRTFM
@DWin:我知道,我知道。但我真的更喜欢说,“那就不要这样做。” - Joshua Ulrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接