Skip to content
Prev 58709 / 63424 Next

[External] numericDeriv alters result of eval in R 4.0.1

Dear all

As far as I could trace, looking at the function C function numeric_deriv,
this unwanted behavior comes from the inner most loop in, at the very end
of the function,
for(i = 0, start = 0; i < LENGTH(theta); i++) {
  for(j = 0; j < LENGTH(VECTOR_ELT(pars, i)); j++, start += LENGTH(ans)) {
    SEXP ans_del;
    double origPar, xx, delta;

    origPar = REAL(VECTOR_ELT(pars, i))[j];
    xx = fabs(origPar);
    delta = (xx == 0) ? eps : xx*eps;
    REAL(VECTOR_ELT(pars, i))[j] += rDir[i] * delta;
    PROTECT(ans_del = eval(expr, rho));
    if(!isReal(ans_del)) ans_del = coerceVector(ans_del, REALSXP);
    UNPROTECT(1);
    for(k = 0; k < LENGTH(ans); k++) {
      if (!R_FINITE(REAL(ans_del)[k]))
        *error(_("Missing value or an infinity produced when evaluating the
model"));*
      REAL(gradient)[start + k] = rDir[i] * (REAL(ans_del)[k] -
REAL(ans)[k])/delta;
    }
    *REAL(VECTOR_ELT(pars, i))[j] = origPar;*
  }
}
Maybe a (naive?) fix is change the if statement in the inner most loop to

if (!R_FINITE(REAL(ans_del)[k])) {


*  REAL(VECTOR_ELT(pars, i))[j] = origPar;  error(_("Missing value or an
infinity produced when evaluating the model"));*}


Regards,
Raimundo Neto


Em ter., 16 de jun. de 2020 ?s 11:31, <luke-tierney at uiowa.edu> escreveu: