[Rd] Ancient C /Fortran code linpack error

Göran Broström goran.brostrom at umu.se
Thu Feb 9 16:00:15 CET 2017


In my package 'glmmML' I'm using old C code and linpack in the 
optimizing procedure. Specifically, one part of the code looks like this:

     F77_CALL(dpoco)(*hessian, &bdim, &bdim, &rcond, work, info);
     if (*info == 0){
         F77_CALL(dpodi)(*hessian, &bdim, &bdim, det, &job);
         ........

This usually works OK, but with an ill-conditioned data set (from a user 
of glmmML) it happened that the hessian was all nan. However, dpoco 
returned *info = 0 (no error!) and then the call to dpodi hanged R!

I googled for C and nan and found a work-around: Change 'if ...' to

    if (*info == 0 & (hessian[0][0] == hessian[0][0])){

which works as a test of hessian[0][0] (not) being NaN.

I'm using the .C interface for calling C code.

Any thoughts on how to best handle the situation? Is this a bug in 
dpoco? Is there a simple way to test for any NaNs in a vector?

Göran Broström

PS. Yes, I will switch to .Call! Soon...



More information about the R-devel mailing list