[R] Why does this work?

Paul Murrell p.murrell at auckland.ac.nz
Wed May 29 00:25:15 CEST 2002


Hi


> I waxs just checking examples in lattice levelplot and I ran into this
> strange (?) behavior I do not understand.
> 
> Here is the example:
> 
>      x <- seq(pi/4, 5*pi, length = 100)
>      y <- seq(pi/4, 5*pi, length = 100)
>      r <- sqrt(outer(x^2, y^2, "+"))
>      grid <- expand.grid(x=x, y=y)
> 
> At this point grid is a 10000*2 data frame and r is a 100*100 matrix.  Now
> comes a surprising part.
> 
>      grid$z <- cos(r^2) * exp(-r/(pi^3))
> 
> This does not generate any error.  But typing
> 
>      grid
> 
> produces
> 
>       Error in data.frame(x = c(" 0.7853982", " 0.9361311", " 1.0868641", "
> 1.2375971",  :
>              arguments imply differing number of rows: 10000, 100
> 
> Moreover
> 
>      dim(grid)
>      [1] 10000     3
> 
> but
> 
>      grid[1:5, ]
> 
> produces an output with 102 columns named x, y, z.1, ..., z.100
> 
> and
> 
>      grid[101, ]
> 
> produces "subscript out of bound" error.
> 
> Finally
> 
>      levelplot(z~x*y, grid, cuts = 50, xlab="", ylab="", main="Weird
> Function", colorkey = FALSE)
> 
> generates a proper contour plot.  Could somebody explain to me why this
> actually works?  Thanks in advance,


I think the problem is that grid$z has a "dim" attribute which means
that it is being treated as a matrix in some of the cases above. 
Compare ...

	attributes(grid$x)
	attributes(grid$y)
	attributes(grid$z)

... You can also see this if you just do ...

	grid$x
	grid$y
	grid$z

... grid$x and grid$y are just vectors of 10000 values, but grid$z is a
100x100 matrix of values.  Now, if you define grid$z as ...

      grid$z <- as.numeric(cos(r^2) * exp(-r/(pi^3)))

... ALL of your examples work (grid$z no longer has a "dim" attribute). 
The examples that worked before were presumably doing an explicit
as.numeric() conversion already (or were just not checking for the "dim"
attribute).

Hope that helps.

Paul
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help 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-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list