【问题标题】:Zero-length error when trying to Lag xts time series?尝试滞后 xts 时间序列时出现零长度错误?
【发布时间】:2020-10-30 12:12:18
【问题描述】:

我有使用以下生成的基本 xts 对象。

library(quantmod)
temp1 <- getSymbols("GOOG",src = 'yahoo',from=Sys.Date()-50,to = Sys.Date(),auto.assign=FALSE)
temp2 <- temp1$GOOG.Close
head(temp2)
           GOOG.Close
2020-05-20    1406.72
2020-05-21    1402.80
2020-05-22    1410.42
2020-05-26    1417.02
2020-05-27    1417.84
2020-05-28    1416.73
lag(temp2,1)
Error in c.xts(NA_real_, c(1406.719971, 1402.800049, 1410.420044, 1417.02002,  : 
  zero-length vectors with non-zero-length index are not allowed

据我所知 temp2 的长度不是零,所以我不明白这个错误。

同样,diff(temp2) 函数也能按预期工作。

这似乎是我最近更新到 R 4.0.1 时开始的

考虑到我确实有一个非零向量,我找不到任何关于此错误的解释。

【问题讨论】:

    标签: r xts


    【解决方案1】:

    您是否偶然加载了dplyr?这是我可以复制您的错误的唯一方法。

    dplyr 掩盖了基本 R 附带的 stats::lag() 泛型函数。这会破坏所有定义 lag() 方法的 S3 类的方法分派。这意味着lag() 可能适用于这些课程,也可能不适用于这些课程。

    R> head(lag(temp2, 1))
               GOOG.Close
    2020-05-26         NA
    2020-05-27    1417.02
    2020-05-28    1417.84
    2020-05-29    1416.73
    2020-06-01    1428.92
    2020-06-02    1431.82
    R> suppressPackageStartupMessages(library(dplyr))
    R> head(lag(temp2, 1))
    Error in c.xts(NA_real_, c(1417.02002, 1417.839966, 1416.72998, 1428.920044,  : 
      zero-length vectors with non-zero-length index are not allowed
    

    因此,您要么需要:1) 不加载 dplyr,要么 2) 在您不想使用 dplyr::lag() 的任何地方显式调用 stats::lag()

    【讨论】:

    • 是的,我确实使用 dplyr,我将使用建议的解决方法。由于这是从 4.​​x 开始的,所以 dplyr 最近是否发生了更改以导致此错误?几个月来我没有更改这部分代码中的任何内容。
    • @MichaelE:不,dplyr 长期以来一直是这样(尽管有几个人指出它非常混乱和破坏性)。我不确定可能发生了什么变化...在脚本中调用该代码之前,您是否总是加载 dplyr?
    • 我想我有一段时间了,但我不确定。我会删除它,看看有什么特别使用它。
    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多