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

时间:2017-05-14 15:24:00

标签: r

我尝试运行下面的代码。

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,长度=最大值(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])

有谁知道问题是什么以及如何解决?感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

错误消息的信息量不大,但如果查看integrate.xy(x,fx,a,b)函数的代码,则可以看到当插值分布中找不到b的匹配项时会出现此错误。 x,给定公差因子。由于未指定容差因子,因此使用默认值xtol=2e-08。 使用xtolintegrate.xy函数定义dig参数,该参数等于dig=round(-log10(xtol))。此参数用于定义将参数b与x的插值分布匹配时要考虑的小数点后的位数。 如果您更改xtol,则可以看到该函数仅返回xtol~<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

答案 1 :(得分:1)

感谢您的建议。我尝试了该方法,并且不再使用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时会发生同样的情况。

有没有办法解决这个问题,以免我遇到这个问题?