20

我不明白为什么 R 会警告我“更长的对象长度不是更短的对象长度的倍数”

我有这个对象,它是通过对 xts 系列进行聚合生成的,给出工作日中位数:

u <- aggregate(d, list(Ukedag = format(index(d),"%w")), median)

1 314.0
2 282.5
3 270.0
4 267.0
5 240.5

然后我尝试将它应用到我原来的 xts 系列中,看起来像这样(只有更长的时间)

head(d)
2009-01-02 116
2009-01-05 256
2009-01-06 286

使用:

coredata(d) <- coredat(d) - u[format(index(d),"%w")];

这会导致警告。

目的是减去工作日平均值。尽管有警告,它似乎仍然有效,但我应该担心什么?

修改后的解决方案:尝试 2

apply.daily(d, function(x) coredata(x) - u[format(index(x), "%w")] )

我确实有一个严重的错误。这不会给出任何警告,我通过以下方式对其进行了测试:

apply.daily(d, function(x) u[format(index(x), "%w")] )

然后检查一些日期,它似乎与日历一致。

4

1 回答 1

18

是的,这是您应该担心的事情。使用 nrow() 检查对象的长度。R 可以自动复制对象,以便它们在不同时具有相同的长度,这意味着您可能正在对不匹配的数据执行操作。

在这种情况下,您有一个明显的缺陷,即从原始数据中减去聚合数据。这些肯定会有不同的长度。我建议您将它们合并为时间序列(使用日期),然后 locf(),然后进行减法。否则,通过将原始日期截断为与聚合系列相同的间隔来合并它们。只是要非常小心,不要放弃观察。

最后,作为开始时的一些一般建议:查看计算结果,看看它们是否有意义。您甚至可以将它们拉入电子表格并复制结果。

于 2010-08-03T09:24:24.087 回答