2017-05-14 8 views
0

エラー(長さ= MAX(0、B - - 1)):私は以下のコードを実行しようとした長さでなければならない非負数

"Error in seq.default(a, length = max(0, b - a - 1)) : 
    length must be non-negative number" 

私が間違っているかわからないです:

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]) 

しかし、私は次のメッセージをrecived。

私は次のように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]) 

誰もが問題とどのようにそれを修正する何を知っていますか?あなたの助けをよろしくお願いします。ありがとう!

+0

'に何のパッケージをintegrate.xy'されますか? – Gopala

+0

パッケージは、すべてのRポスターに – user340803

+0

sfsmiscある:基地R上に使用する場合は、常に、常に、常に 'コードで()'ラインライブラリを含みます。そのようなパッケージがあるとは決して考えないでください。 – Parfait

答えて

0

私はintegrate.xy関数のソースコードを調べましたが、xtol引数の使用に関するバグがあるようです。

function (x, fx, a, b, use.spline = TRUE, xtol = 2e-08) 
{ 
    dig <- round(-log10(xtol)) 
    f.match <- function(x, table) match(signif(x, dig), signif(table, 
                  dig)) 
    if (is.list(x)) { 
    fx <- x$y 
    x <- x$x 
    if (length(x) == 0) 
     stop("list 'x' has no valid $x component") 
    } 
    if ((n <- length(x)) != length(fx)) 
    stop("'fx' must have same length as 'x'") 
    if (is.unsorted(x)) { 
    i <- sort.list(x) 
    x <- x[i] 
    fx <- fx[i] 
    } 
    if (any(i <- duplicated(x))) { 
    n <- length(x <- x[!i]) 
    fx <- fx[!i] 
    } 
    if (any(diff(x) == 0)) 
    stop("bug in 'duplicated()' killed me: have still multiple x[]!") 
    if (missing(a)) 
    a <- x[1] 
    else if (any(a < x[1])) 
    stop("'a' must NOT be smaller than min(x)") 
    if (missing(b)) 
    b <- x[n] 
    else if (any(b > x[n])) 
    stop("'b' must NOT be larger than max(x)") 
    if (length(a) != 1 && length(b) != 1 && length(a) != length(b)) 
    stop("'a' and 'b' must have length 1 or same length !") 
    else { 
    k <- max(length(a), length(b)) 
    if (any(b < a)) 
     stop("'b' must be elementwise >= 'a'") 
    } 
    if (use.spline) { 
    xy <- spline(x, fx, n = max(1024, 3 * n)) 
    if (xy$x[length(xy$x)] < x[n]) { 
     if (TRUE) 
     cat("working around spline(.) BUG --- hmm, really?\n\n") 
     xy$x <- c(xy$x, x[n]) 
     xy$y <- c(xy$y, fx[n]) 
    } 
    x <- xy$x 
    fx <- xy$y 
    n <- length(x) 
    } 
    ab <- unique(c(a, b)) 
    xtol <- xtol * max(b - a) 
    BB <- abs(outer(x, ab, "-")) < xtol 
    if (any(j <- 0 == apply(BB, 2, sum))) { 
    y <- approx(x, fx, xout = ab[j])$y 
    x <- c(ab[j], x) 
    i <- sort.list(x) 
    x <- x[i] 
    fx <- c(y, fx)[i] 
    n <- length(x) 
    } 
    ai <- rep(f.match(a, x), length = k) 
    bi <- rep(f.match(b, x), length = k) 
    dfx <- fx[-c(1, n)] * diff(x, lag = 2) 
    r <- numeric(k) 
    for (i in 1:k) { 
    a <- ai[i] 
    b <- bi[i] 
    r[i] <- (x[a + 1] - x[a]) * fx[a] + (x[b] - x[b - 1]) * 
     fx[b] + sum(dfx[seq(a, length = max(0, b - a - 1))]) 
    } 
    r/2 
} 

xtol引数に与えられた値は、ラインxtol <- xtol * max(b - a)に上書きされている:

参考のため、ここでintegrate.xy関数のソースコードです。しかし、変数の値は、関数への入力に示されているように、元の値xtolに基づいて計算されます。このため不一致の、f.match関数は、ラインbi <- rep(f.match(b, x), length = k)において、XおよびB(すなわち、NA)との間に一致が返されていません。これにより、遭遇したエラーが発生します。

簡単な修正は、少なくとも問題の場合のために、xtol <- xtol * max(b - a)行を削除することです。しかし、より厳密な修正のために、このパッケージの管理者にバグレポートを提出するべきです。

関連する問題