matrix() can't handle NaN (PR#193)

Ben Bolker ben@eno.princeton.edu
Tue, 11 May 1999 09:05:04 -0400 (EDT)


  Perhaps this should be in a FAQ list ...

> data<-read.table("~/junk.dat",header=TRUE, na.strings="NaN")
> data
  x y  z
1 1 1  1
2 1 2  2
3 2 1 NA
4 2 2  4

> x<-unique(data$x)
> y<-unique(data$y)
> matrix(data$z,length(y),length(x))
     [,1] [,2]
[1,]    1   NA
[2,]    2    4

  "NaN" (Not a Number) as seen in debuggers, etc., is not the same as "NA"
as a "not available/applicable" value in R.

On Tue, 11 May 1999, Bill Simpson wrote:

> 
> 
> On Tue, 11 May 1999, Kurt Hornik wrote:
> 
> > >>>>> wsi  writes:
> > 
> > > Full_Name: Bill Simpson
> > > Version: 0.64.1
> > > OS: linux
> > > Submission from: (NULL) (193.62.250.209)
> > 
> > 
> > > Here is the data file:
> > > x y z
> > > 1 1 1
> > > 1 2 2
> > > 2 1 NaN
> > > 2 2 4
> > 
> > >> data<-read.table("~/junk.dat",header=TRUE)
> > 
> > >> data
> > >   x y   z
> > > 1 1 1   1
> > > 2 1 2   2
> > > 3 2 1 NaN
> > > 4 2 2   4
> > 
> I forgot these steps:
> x<-unique(data$x)
> y<-unique(data$y)
> 
> > >> matrix(data$z,length(y),length(x)) 
> > >      [,1] [,2]
> > > [1,]    1    4
> > > [2,]    2    3
> > 
> > > This is not the correct matrix.  It seems that NaNs screw up matrix().
> > 
> > Actually, data$z is a factor with one level NaN.
> Geez, I why is data$z a factor?  That seems bizarre. It is supposed to be
> the measured value (IV) at each combination of x and y. So what is the
> right way to convert my original file?
> 
> I go through all this just to produce an image or contour or persp plot.
> 
> > R> data$z
> > [1] 1   2   NaN 4  
> > Levels:  1 2 4 NaN
> Weird! Is this because matrix() interprets NaN as a character string
> instead of as an NaN (which is a "number", isn't it?)?
> 
> Why then isn't everything converted to a factor?
> > data$x
> [1] 1 1 2 2
> > data$y
> [1] 1 2 1 2
> 
> Also, why does matrix() work as I expect when the NaN in the file is
> changed to a 0:
> > matrix(data$z,length(y),length(x))
>      [,1] [,2]
> [1,]    1    0
> [2,]    2    4
> 
> It also works as I expect when the NaN is changed to an NA:
> > matrix(data$z,length(y),length(x))
>      [,1] [,2]
> [1,]    1   NA
> [2,]    2    4
> 
> 
> > What you get is the codes of that, which I think is what you want.
> NOPE! I want a matrix:
> 1	NaN
> 2	4
> 
> Bill
> 
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
> 

Benjamin Bolker          Dep't of Ecology and Evolutionary Biology,
ben@eno.princeton.edu    Princeton University
tel: (609) 258-6886,     fax: (609) 258-1334

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._