【问题标题】:"Argument is of length 0" when comparing xts objects比较 xts 对象时“参数长度为 0”
【发布时间】:2013-07-26 05:50:05
【问题描述】:

这一定很简单,但我似乎找不到解决方案。我需要比较 2 个 xts 对象的 Close

我有 2 个xts 对象:

>low2
low2           daco.Close
2013-07-24     6.63

>low3
low3           daco.Close
2013-07-24     2.63

但是当我尝试这样的事情时

if(low2$daco.Close < low3$daco.Close) {...}

我不断收到错误

Error in if (low2$daco.Close < low3$daco.Close) { : 
  argument is of length zero

即使当我尝试print(low2)print(low3) 时,我得到了正确的值。

任何有关如何解决此问题的提示将不胜感激。 谢谢!

编辑: 以下是low2low3 的输出

> dput(low2)
structure(6.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), index = structure(1374451200, tzone = "UTC", tclass = "Date"), .Dim = c(1L, 
1L), .Dimnames = list(NULL, "daco.Close"))
> dput(low3)
structure(2.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), index = structure(1374624000, tzone = "UTC", tclass = "Date"), .Dim = c(1L, 
1L), .Dimnames = list(NULL, "daco.Close"))

【问题讨论】:

  • 那些看起来不像 xts 对象。请提供dput(low2)dput(low3)的输出
  • 这是输出 structure(6.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct", "POSIXt")), class = c("xts", "zoo"), index = structure(1374624000, tzone = "UTC", tclass = "Date"), .Dim = c(1L, 1L), .Dimnames = list(NULL, "daco.Close")) 也可能有帮助,low2 = low2$daco.Close 当我调用 low2 时,我得到了我在问题中发布的输出。谢谢!
  • 将其编辑到您的问题中,并提供dput(low3) 的输出。根据您提供的内容,我只能说它不可重现,因为if (low2$daco.Close &lt; low2$daco.Close) TRUE 没有给出您显示的错误。
  • 您好,感谢您的宝贵时间。事实上,如果我将low2 与它本身进行比较,它会起作用,low3 也会发生同样的情况。当我将它们相互比较时,它们就会出现问题。
  • 谢谢。请注意,对象的日期与您最初显示的不同。这会有所不同。

标签: r xts


【解决方案1】:

xts 对象在操作完成之前按索引对齐。请注意,low2$daco.Close + low3$daco.Close 可能也不会返回您认为的内容。

这是您传递给if 语句的内容:

> low2$daco.Close < low3$daco.Close     
     [,1]
> str(low2$daco.Close < low3$daco.Close)
An 'xts' object of zero-width

您可以在一个或两个 xts 对象上使用 coredata

low2$daco.Close < coredata(low3$daco.Close)
#           daco.Close
#2013-07-22      FALSE

或者您可以强制其中一个或两个首先使用numeric

as.numeric(low2$daco.Close) < as.numeric(low3$daco.Close)
#[1] FALSE

如果它们确实具有相同的索引,它应该可以正常工作。

index(low3) <- index(low2)
low2$daco.Close < low3$daco.Close
#           daco.Close
#2013-07-22      FALSE

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多