barry.rowlingson@gmail.com
2005-Oct-20 16:41 UTC
[Rd] image() with all NAs fails (PR#8228)
Full_Name: Barry Rowlingson Version: 2.2.0 OS: Linux Submission from: (NULL) (194.80.32.8) The image function with a matrix of all NA values fails with:> xyz=list(x=1:3,y=1:4,z=matrix(NA,3,4)) > image(xyz)Error in image.default(xyz) : invalid z limits In addition: Warning messages: 1: no finite arguments to min; returning Inf 2: no finite arguments to max; returning -Inf Image can handle any number of NAs as long as there is at least one data value:> xyz=list(x=1:3,y=1:4,z=matrix(c(1,rep(NA,11)),3,4)) > image(xyz)and shows NAs as transparent. However if it is all NAs then the z-limit calculation breaks down as above. It seems reasonable to me that image() with all NAs should produce a completely transparent/empty image (after displaying the axes if add!=TRUE) and not fail with an error. Barry
On 10/20/2005 12:41 PM, barry.rowlingson at gmail.com wrote:> Full_Name: Barry Rowlingson > Version: 2.2.0 > OS: Linux > Submission from: (NULL) (194.80.32.8) > > > The image function with a matrix of all NA values fails with: > >> xyz=list(x=1:3,y=1:4,z=matrix(NA,3,4)) >> image(xyz) > Error in image.default(xyz) : invalid z limits > In addition: Warning messages: > 1: no finite arguments to min; returning Inf > 2: no finite arguments to max; returning -Inf > > Image can handle any number of NAs as long as there is at least one data value: > >> xyz=list(x=1:3,y=1:4,z=matrix(c(1,rep(NA,11)),3,4)) >> image(xyz) > > and shows NAs as transparent. However if it is all NAs then the z-limit > calculation breaks down as above. > > It seems reasonable to me that image() with all NAs should produce a > completely transparent/empty image (after displaying the axes if add!=TRUE) and > not fail with an error.I agree, though I think the warnings are reasonable and a fix shouldn't remove them. However, I'm not sure what the fix should be. There's a test in image.default if (any(!is.finite(zlim)) || diff(zlim) < 0) stop("invalid z limits") that is throwing the error. We want the error if a user specifies diff(zlim) < 0 or non-finite z limits, we just don't want it if all the z's are NA. But a test all(is.na(z)) looks a bit expensive for such a rare case. Maybe the solution is to document this limitation? Users can get the all transparent image by explicitly specifying zlim. Folks who might accidentally pass in all missing data can test for it themselves. Duncan Murdoch