gpt4 book ai didi

r - 来自all.equal.POSIXct的意外输出

转载 作者:行者123 更新时间:2023-12-04 03:33:21 24 4
gpt4 key购买 nike

我从R中的all.equal方法(特别是POSIXct的实现all.equal.POSIXct)中得到了意外的输出。

t <- Sys.time()
isTRUE(all.equal(t, t+1))

返回TRUE,并且
isTRUE(all.equal(t, t+1, scale = 1))

返回FALSE。

但是,如果查看all.equal.POSIXct的定义,则可以看到scale参数的默认值为1:
> all.equal.POSIXct
function (target, current, ..., scale = 1)
{
check_tzones(target, current)
NextMethod("all.equal")
}
<bytecode: 0x22eac90>
<environment: namespace:base>

如果您显式调用all.equal.POSIXct而不是all.equal,则会得到相同的结果。

为什么在第一次调用all.equal.POSIXct时没有选择默认参数scale = 1?我是在做错什么,还是我从根本上误解了某件事,或者这是一个错误?

在此先感谢您的帮助。

最佳答案

我在这里稍稍走出去,但我认为您已经发现了一个错误。

这是我建议的解决方法:

all.equal.POSIXct <- function (target, current, ..., scale = 1) {
check_tzones(target, current)
NextMethod("all.equal", scale=scale, ...)
}

然后,该函数将给出正确的结果:
all.equal(t, t+1)
[1] "Mean scaled difference: 1"

all.equal(t, t+1, scale=10)
[1] "Mean scaled difference: 0.1"

这就是为什么现有代码不起作用的原因:
all.equal的定义是:
all.equal <- function (target, current, ...) UseMethod("all.equal")
  • 注意,这里有三个参数:targetcurrent...
  • 因此,每当您使用NextMethod时,这三个参数将被传递给下一个方法。
  • 但是,在all.equal.POSIXct的情况下,还有一个附加参数scale=,但这不会隐式或显式传递。
  • 关于r - 来自all.equal.POSIXct的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293856/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com