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,
Andy
PS. This happens using precompiled R-1.5.0 (recently patched version
posted by Prof. Ripley) on a Win2000 machine.
__________________________________
Andy Jaworski
Engineering Systems Technology Center
3M Center, 518-1-01
St. Paul, MN 55144-1000
-----
E-mail: apjaworski at mmm.com
Tel: (651) 733-6092
Fax: (651) 736-3122
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._