Blame | Last modification | View Log | Download | RSS feed
library(lattice)data(volcano)foo <-data.frame(z = as.vector(volcano),x = rep(1:87, 61),y = rep(1:61, each = 87))wireframe(z ~ x * y, foo)## this used to give an error, but seems fine now (?)wireframe(z ~ x * y, foo, subset = z > 150)## Example 1 (a). valgrind shows warnings, starting with## ==9058== Invalid read of size 8## ==9058== at 0xA450AFF: wireframePanelCalculations (threeDplot.c:291)## and subsequently in various other places in that function leading to## ==9058== Conditional jump or move depends on uninitialised value(s)## ==9058== at 0x3FFAA466CF: __printf_fp (in /lib64/libc-2.4.so)## ==9058== by 0x3FFAA423AE: vfprintf (in /lib64/libc-2.4.so)## ==9058== by 0x3FFAA4A477: fprintf (in /lib64/libc-2.4.so)## ==9058== by 0x94975BE: PostScriptRLineTo (devPS.c:2683)## A bit more tracing shows it is accessing element 4016 in an array of## length 2456, and the plot seems nonsense (and random) when viewed on## screen. (BDR, 2006/09/17)## DS's earlier comment: what's this supposed to do ? weird thing is,## result is random (probably indicator of memory access errors)if (FALSE){wireframe(z + I(z + 100) ~ x * y, foo,subset = z > 150,scales = list(arrows = FALSE))}## this works as expectedwireframe(z + I(z + 100) ~ x * y, foo)## Example 1 (b). Another way of seeing the problem:## this is OK:bar <- foobar$z[bar$z < 150] <- NAwireframe(z + I(z + 100) ~ x * y, bar,scales = list(arrows = FALSE))## but this is notif (FALSE){wireframe(z + I(z + 100) ~ x * y,subset(bar, !is.na(z)),scales = list(arrows = FALSE))}## Example 2. Probably another example of the same "bug": see## https://stat.ethz.ch/pipermail/r-devel/2005-September/034544.htmllibrary(lattice)n <- 20psteps <- 50binomtable <- function(n, psteps){x <- (0:(10*n))/10p <- (0:psteps)/pstepsdd <- expand.grid(x=x,p=p)dd$F <- pbinom(dd$x,n,dd$p)dd$x0 <-trunc(dd$x)dd}bt <- binomtable(n = 5, psteps = 100)bt[bt$x - bt$x0 >= 0.9, ]$F <- NAif (FALSE){## this is problematicwireframe(F ~ x * p, bt,groups = bt$x0, shade = TRUE,scales = list(arrows = FALSE))}## this one OKwireframe(F ~ x * p, bt, shade = TRUE,scales = list(arrows = FALSE))## this toowireframe(F ~ x * p | factor(x0), bt,## groups = bt$x0,shade = TRUE,scales = list(arrows = FALSE))## Working hypothesis: the problem crops up when there are groups## (specified either directly or through the formula interface) AND x## and y values for each group don't represent the full evaluation## grid. The second condition is a bit unclear. In example 2, each## group's support is disjoint from that of the others. In example 1,## both groups have the same support, they are just not the full grid.