【问题标题】:R- programming - Error in seq.default(a, length = max(0, b - a - 1)) : length must be non-negative numberR- 编程 - seq.default(a, length = max(0, b - a - 1)) 中的错误:长度必须为非负数
【发布时间】:2017-05-14 15:24:00
【问题描述】:

我尝试运行下面的代码。

library(sfsmisc)
set.seed(307)
y  <- rnorm(200)
h2 <- 0.3773427

t   <- seq(-3.317670,  2.963407, length.out=500)
fit <- density(y, bw=h2, n=1024, kernel="epanechnikov")

integrate.xy(fit$x, fit$y, min(fit$x), t[407])

但是,我收到以下消息:

"seq.default(a, length = max(0, b - a - 1)) 中的错误: 长度必须是非负数”。

我不知道出了什么问题。

当我使用 t[406] 或 t[408] 时,我没有遇到任何问题,如下所示:

integrate.xy(fit$x, fit$y, min(fit$x), t[406])
integrate.xy(fit$x, fit$y, min(fit$x), t[408])

有谁知道问题出在哪里以及如何解决?感谢您的帮助,谢谢!

【问题讨论】:

  • 这个问题离题了。

标签: r


【解决方案1】:

错误信息不是很丰富,但是如果你查看integrate.xy(x,fx,a,b)函数的代码,你可以看到当在x的插值分布中没有找到b的匹配时出现这个错误,给定容差系数。由于您没有指定容差因子,因此使用默认值,即xtol=2e-08。 使用xtolintegrate.xy 函数定义了一个等于dig=round(-log10(xtol))dig 参数。此参数用于定义在将参数b 与 x 的插值分布匹配时考虑的小数点后的位数。 如果更改xtol,您可以看到该函数只返回xtol~&lt;3.16228e-7 值的错误消息,对应于dig 值6 和dig 值7 之间的阈值。这意味着当取小数点后 6 位,您会在 x 的插值分布中找到与 b 的匹配项,但取 7 时,您不会。 您可以通过将 xtol 参数更改为 3.16228e-7 或更高的值来解决您的问题。

integrate.xy(fit$x, fit$y, min(fit$x), t[407],xtol=3.16228e-7)
[1] 0.9565527

【讨论】:

    【解决方案2】:

    感谢您的建议。我尝试了该方法,使用 set.seed(307) 不再看到上述模拟的错误。但是,当我尝试运行以下代码时,仍然会出现错误:

    for (i in 1:2000) {
    print(i)
    set.seed(i)
    y  <- rnorm(200)
    h2 <- 0.3773427
    
    t   <- seq(-3.317670,  2.963407, length.out=500)
    fit <- density(y, bw=h2, n=1024, kernel="epanechnikov")
    
    integrate.xy(fit$x, fit$y, min(fit$x), t[407],xtol=3.16228e-7)
    }
    

    当我使用 xtol=4.16228e-6 时也会发生同样的情况。

    有没有办法解决这个问题,这样我就不会遇到这个问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多