Skip to content

segfault isoreg with NAs

3 messages · Tobias Verbeke, Martin Maechler

#
Dear list,

As can be seen below, adding a NA to the y values
in a call to isoreg results in a segfault.

ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, NA, 8))

Adding missing values to the x values, on the contrary,
gives an error, but maybe the error message could be
tailored to this particular situation.

y <- c(5, 9, 1:2, 5:8, 3, 8)
x <- c(1:9, NA)
isoreg(x, y)
## error message: Error in if (!isOrd) { : missing value where 
TRUE/FALSE needed

Please find below a (temporary) patch (against Revision 43692)
for both the R source and the help file.

Kind regards,
Tobias

### patch isoreg.R ###

--- isoreg.R	2007-12-14 19:07:47.000000000 +0100
+++ isoreg2.R	2007-12-14 19:11:20.000000000 +0100
@@ -18,6 +18,9 @@
  ##
  isoreg <- function(x, y=NULL)
  {
+    if (any(is.na(x))) stop("x may not contain NA values")
+    if (any(is.na(y))) stop("y may not contain NA values")
+
      xy <- xy.coords(x,y)
      x <- xy$x
      isOrd <- (!is.null(xy$xlab) && xy$xlab == "Index") || !is.unsorted(x)

### patch isoreg.Rd ###

--- isoreg.Rd	2007-12-14 19:08:12.000000000 +0100
+++ isoreg2.Rd	2007-12-14 19:15:00.000000000 +0100
@@ -20,6 +20,7 @@
    \item{x, y}{%in \code{isoreg},
      coordinate vectors of the regression points.  Alternatively a single
      plotting structure can be specified: see \code{\link{xy.coords}}.
+    The coordinate vectors may not contain missing values.
    }
  }
  \details{


### sessionInfo() information segfault ###
R version 2.6.0 (2007-10-03)
i486-pc-linux-gnu

locale:
LC_CTYPE=en_US.ISO-8859-15;LC_NUMERIC=C;LC_TIME=en_US.ISO-8859-15;LC_COLLATE=en_US.ISO-8859-15;LC_MONETARY=en_US.ISO-8859-15\
;LC_MESSAGES=en_US.ISO-8859-15;LC_PAPER=en_US.ISO-8859-15;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.ISO-885\
9-15;LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
*** caught segfault ***
address 0x24, cause 'memory not mapped'

Process R segmentation fault (core dumped) at Fri Dec 14 17:48:22 2007
5 days later
#
I was able to reproduce the problem under Windows (R 2.6.1).
When running ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, NA, 8)),
the following message appears:

"R for Windows GUI front-end has encountered a problem and
needs to close. We are sorry for the inconvenience"

after which R closes.

HTH,
Tobias

 > sessionInfo()
R version 2.6.1 (2007-11-26)
i386-pc-mingw32

locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United 
States.1252;LC_MONETARY=English_United 
States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
1 day later
#
Hi Tobias,
TobiasV> I was able to reproduce the problem under Windows (R 2.6.1).
    TobiasV> When running ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, NA, 8)),
    TobiasV> the following message appears:

    TobiasV> "R for Windows GUI front-end has encountered a problem and
    TobiasV> needs to close. We are sorry for the inconvenience"

    TobiasV> after which R closes.

thank you for keeping the topic live.

Just now I've wanted to address this as a "clean up before Christmas"
action.

The next versions of R definitely will no longer seg.fault here.
The question, what exactly one should have happening is another
one.

If you want (since nobody else seems particularly
interested) we can continue to look at this in off-list for a
while.

Best regards,
Martin


    TobiasV> HTH,
    TobiasV> Tobias

    >> sessionInfo()
    TobiasV> R version 2.6.1 (2007-11-26)
    TobiasV> i386-pc-mingw32

    TobiasV> locale:
    TobiasV> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United 
    TobiasV> States.1252;LC_MONETARY=English_United 
    TobiasV> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

    TobiasV> attached base packages:
    TobiasV> [1] stats     graphics  grDevices utils     datasets  methods   base

    >> As can be seen below, adding a NA to the y values
    >> in a call to isoreg results in a segfault.
    >> 
    >> ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, NA, 8))
    >> 
    >> Adding missing values to the x values, on the contrary,
    >> gives an error, but maybe the error message could be
    >> tailored to this particular situation.
    >> 
    >> y <- c(5, 9, 1:2, 5:8, 3, 8)
    >> x <- c(1:9, NA)
    >> isoreg(x, y)
    >> ## error message: Error in if (!isOrd) { : missing value where 
    >> TRUE/FALSE needed
    >> 
    >> Please find below a (temporary) patch (against Revision 43692)
    >> for both the R source and the help file.
    >> 
    >> Kind regards,
    >> Tobias
    >> 
    >> ### patch isoreg.R ###
    >> 
    >> --- isoreg.R	2007-12-14 19:07:47.000000000 +0100
    >> +++ isoreg2.R	2007-12-14 19:11:20.000000000 +0100
    >> @@ -18,6 +18,9 @@
    >> ##
    >> isoreg <- function(x, y=NULL)
    >> {
    >> +    if (any(is.na(x))) stop("x may not contain NA values")
    >> +    if (any(is.na(y))) stop("y may not contain NA values")
    >> +
    >> xy <- xy.coords(x,y)
    >> x <- xy$x
    >> isOrd <- (!is.null(xy$xlab) && xy$xlab == "Index") || !is.unsorted(x)
    >> 
    >> ### patch isoreg.Rd ###
    >> 
    >> --- isoreg.Rd	2007-12-14 19:08:12.000000000 +0100
    >> +++ isoreg2.Rd	2007-12-14 19:15:00.000000000 +0100
    >> @@ -20,6 +20,7 @@
    >> \item{x, y}{%in \code{isoreg},
    >> coordinate vectors of the regression points.  Alternatively a single
    >> plotting structure can be specified: see \code{\link{xy.coords}}.
    >> +    The coordinate vectors may not contain missing values.
    >> }
    >> }
    >> \details{
    >> 
    >> 
    >> ### sessionInfo() information segfault ###
    >> 
    >>> sessionInfo()
    >> R version 2.6.0 (2007-10-03)
    >> i486-pc-linux-gnu
    >> 
    >> locale:
    >> LC_CTYPE=en_US.ISO-8859-15;LC_NUMERIC=C;LC_TIME=en_US.ISO-8859-15;LC_COLLATE=en_US.ISO-8859-15;LC_MONETARY=en_US.ISO-8859-15\
    >> ;LC_MESSAGES=en_US.ISO-8859-15;LC_PAPER=en_US.ISO-8859-15;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.ISO-885\
    >> 9-15;LC_IDENTIFICATION=C
    >> 
    >> attached base packages:
    >> [1] stats     graphics  grDevices utils     datasets  methods   base
    >>> ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, NA, 8))
    >> 
    >> *** caught segfault ***
    >> address 0x24, cause 'memory not mapped'
    >> 
    >> Process R segmentation fault (core dumped) at Fri Dec 14 17:48:22 2007
    >> 
    >> ______________________________________________
    >> R-devel at r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel
    >> 
    >> 

    TobiasV> ______________________________________________
    TobiasV> R-devel at r-project.org mailing list
    TobiasV> https://stat.ethz.ch/mailman/listinfo/r-devel