From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Thu Jun 27 16:21:11 2019
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Thu, 27 Jun 2019 16:21:11 +0200
Subject: [Rd] Seg fault stats::runmed
In-Reply-To: <23479.14853.789755.950142@stat.math.ethz.ch>
References: <3e83fd14-fe55-3c45-93cb-57a146d2efaf@mpiib-berlin.mpg.de>
 <23479.14853.789755.950142@stat.math.ethz.ch>
Message-ID: <23828.53463.63477.41179@stat.math.ethz.ch>

>>>>> Martin Maechler 
>>>>>     on Fri, 5 Oct 2018 12:16:37 +0200 writes:

>>>>> Hilmar Berger 
>>>>>     on Fri, 5 Oct 2018 10:17:49 +0200 writes:

    >> Dear all, I just found this issue:

    >> I just found this issue:

    >> dd1 = c(rep(NaN,82), rep(-1, 144), rep(1, 74))
    >> xx = runmed(dd1, 21)

    >>> R crashes reproducibly in R 3.4.3, R3.4.4 (Ubuntu 14.04/Ubuntu 16.04)

    > and also in the latest development version (we call "R-devel").

    > THank you very much, Hilmar!

    > I will have a look, to ensure missing values (incl NaN) are
    > handled propertly.

That "look" had several parts to it, with long breaks in between;
finally Hilmar kindly asked me privately, and I committed
changes to R-devel (and R 3.6.0 patched), with NEWS entry

    * runmed(x, *) when x contains missing values now works for
      algorithm="Stuetzle", also based on smoothEnds(y) working with
      NA's, and no longer segfaults for the "Turlach" algorithm;
      reported by Hilmar Berger.

but the changes were not at all sufficient to correctly deal
with NA / NaN's in runmed() --- and hence the above NEWS entry
was "fake news" as some may call it.

So, the last 2 weeks or so, I've spent several working days and
some extra hours trying to get this going. {several tries proved
to be insufficient, logically wrong, too optimistic, ...}

In the end, I've implemented a simplistic "imputation"-scheme
for the default case, *and* also added a new optional argument
'na.action' to runmed(),
and committed this half an hour ago :

------------------------------------------------------------------------
r76744 | maechler | 2019-06-27 15:51:04 +0200 (Thu, 27. Jun 2019) 

   M doc/NEWS.Rd
   M src/library/stats/R/runmed.R
   M src/library/stats/man/runmed.Rd
   M src/library/stats/man/smoothEnds.Rd
   M src/library/stats/src/Srunmed.c
   M src/library/stats/src/Trunmed.c
   M src/library/stats/src/init.c
   M src/library/stats/src/statsR.h
   M tests/Examples/stats-Ex.Rout.save
   M tests/reg-tests-1d.R

runmed(<NAs>, "Turlach") did still seg.fault. Now, NEWS entry (76682) should be true; new argument `na.action = ".."` determines *how* NA/NaN are treated
------------------------------------------------------------------------

As this does prevent seg.faults, and if it is acceptable to the
release process, this may also make it into the upcoming R 3.6.1.

--
Martin Maechler
ETH Zurich and R Core Team



[Rd] Seg fault stats::runmed
Martin Maechler