From bbolker at gmail.com  Wed Nov 16 22:38:46 2011
From: bbolker at gmail.com (Ben Bolker)
Date: Wed, 16 Nov 2011 16:38:46 -0500
Subject: [Rd] strange behavior from cex="*"
Message-ID: <4EC42D66.502@gmail.com>

  Someone inquired on StackOverflow about apparently non-deterministic
graphics behaviour in R.  I noticed that they were using cex="*" and
discovered some potentially weird behavior.

   On repeated runs of the same code I can get different PNGs.  If I set
the number of runs high enough, I seem to be able to get R to hang.
If I do a single version plotting to an interactive graphics window I
can get the point sizes to jump around as I resize the window (someone
reported being able to reproduce that behaviour in the Windows GUI as well).

  This is clearly a user error, but non-deterministic behaviour (and
hanging) are a little disturbing.

  I haven't had a chance yet to try to dig in and see what's happening
but thought I would report to see if anyone else could reproduce/figure
it out.

  Ben Bolker


########################
## n <- 100  ## hangs R

n <- 33

fn <- paste("tmp",seq(n),"png",sep=".")
for (i in seq(n)) {
    png(fn[i])
    plot(1:10,1:10,cex="*");
    dev.off()
}

ff <- subset(file.info(fn),select=size)
ff <- ff[!duplicated(ff$size),,drop=FALSE]
table(ff$size)
require(png)
pngs <- lapply(rownames(ff),readPNG)

png.to.img <- function(x) matrix(rgb(x[,,1],x[,,2],x[,,3]),
                                 nrow=dim(x)[1],ncol=dim(x)[2])

imgs <- lapply(pngs,png.to.img)

par(mfrow=c(2,2))
lapply(imgs,function(x) {
  plot(0:1,0:1,type="n",ann=FALSE,axes=FALSE)
  rasterImage(x,0,0,1,1)
})

#########################

> sessionInfo()
R Under development (unstable) (2011-10-06 r57181)
Platform: i686-pc-linux-gnu (32-bit)

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

other attached packages:
[1] glmmADMB_0.6.5 MASS_7.3-14    png_0.1-3

loaded via a namespace (and not attached):
[1] grid_2.15.0     lattice_0.19-33 nlme_3.1-102    tools_2.15.0



[Rd] strange behavior from cex="*"
Ben Bolker