[Rd] withTimeout bug, it does not work properly with nlme anymore

Martin Maechler maechler at stat.math.ethz.ch
Tue Jan 30 15:17:50 CET 2018

>>>>> Ramiro Barrantes <ramiro at precisionbioassay.com>
>>>>>     on Mon, 27 Nov 2017 21:02:52 +0000 writes:

    > Hello, I was relying on withTimeout (from R.utils) to help
    > me stop nlme when it �hangs�.  However, recently this
    > stopped working.  I am pasting a reproducible example
    > below: withTimeout should stop nlme after 10 seconds but
    > the code will generate data for which nlme does not
    > converge (or takes too long) and withTimeout does not stop
    > it.  I tried this both on a linux (64 bit, CentOS 7, R
    > 3.4.1, nlme 3.1-131 R.util 2.6, and also with R 3.2.5) and
    > mac (Sierra 10.13.1, R 3.4.2, same versions or nlme and
    > R.utils).  It takes over R and I need to use brute-force
    > to stop it.  As mentioned, this used to work and it is
    > very helpful for the purposes of having a loop where nlme
    > goes through many models.

    > Thank you in advance for any help, Ramiro

Dear Ramiro,

as I thought you are reporting a bug  about  R.utils  withTimeout(),
I and maybe others have not reacted.

You've addressed this again in a non-public e-mail,
and indeed the underlying bug is really in nlme  which you do
mention implicitly.

I'm appending a version of your example that is not using R.utils
at all and reproducible hangs for me with R 3.4.3, R 3.4.3
patched and R-devel (and almost surely earlier versions of R
which I did not check.

Indeed, the call to nlme() "stalls" // "hangs" / "freezes" /
... R indeed, and cannot be terminated in a regular way, and, as
you, I do need "brute force" to stop it, killing the R process

As the maintainer of the 'nlme'  *is* R-core,
we are asked to fix this, at least making it interruptable.

Still I should not take time for that for the next couple of
weeks as I should fulfill several other day jobs duties,
instead, and so will not promise anything here.

Tested (minimal) patches are welcome!

Here's a version of your script slightly simplified which
exhibits the problem and shows the problem indeed does not
happen in nlminb() -- which I wrongly assumed for a while --
but indeed in nlme's call to own .C() code.

I am looking into fixing this (making it interruptable // detect
the infinite loop).
My guess is that it only happens in degenerate cases like here.

Martin Maechler
ETH Zurich

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: nlme-stall_Barrantes.R
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20180130/9ab3a760/attachment.ksh>

More information about the R-devel mailing list