[Rd] strange behavior from cex="*"
Ben Bolker
bbolker at gmail.com
Wed Nov 16 23:26:18 CET 2011
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 11-11-16 05:18 PM, peter dalgaard wrote:
>
> On Nov 16, 2011, at 22:38 , Ben Bolker wrote:
>
>> 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.
>
> It can be reproduced much more simply (well, not the hang, but bad enough):
>
> In a plain R application console (OSX Snow Leopard),
>
> for (i in 1:100) plot(1:10,cex="*")
>
> will _sometimes_ show big circles, indicating random data being picked up.
>
> The "cex" is by definition numeric, so you can't expect to be able to pass a character string, but the code should check.
Looks (?) like the check could go in FixupCex (which already tests for
isReal, isInteger, and isLogical) in src/main/plot.c , unless there is a
wish to catch it earlier/in R code.
It's mildly surprising to me that people can continue to find odd
cases like this after more than 10 years (and imagine how many
cumulative hours of R use ...) [I'm assuming that this hole has been
present for a log time: I don't have the patience to do the SVN
archaeology to find out how long.]
>
>>
>> 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
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOxDiKAAoJED2whTVMEyK9ThoIAIjyMpzZqsjUpJVbAb9K8IrL
LbSFh8zb+cZb90ABkFwJaZ2FNTKCjPrUzOYzxxHuU9AY0bdPQGbIm2hvQfzcuMlc
urS/ILIMzZEFSYkqkj0mWI9SADyJ+W0YeN/t3EuWy8nZqUkYQZ8M0GsuXjhtUL/i
hVJU0uuIWCOCHpeI3SQKoxviTE6MQFRXXWhCAJx01h8ee/5UQ5GSGB7Er2Zilld3
0sLI6dmoF7gbeYqz33MaEpQ7geJoW3tfnVbQWUlF86+jGGv5trIqWYIp33OYIxMO
u2YUq51vB+4uIRPFJ4Oyr+nJF0Z9NH4IJBipp/bF6wQ5u6JdXFqKTPeQ1V6m5qk=
=YajM
-----END PGP SIGNATURE-----
More information about the R-devel
mailing list