From murdoch at stats.uwo.ca  Thu Oct 20 20:45:06 2005
From: murdoch at stats.uwo.ca (murdoch@stats.uwo.ca)
Date: Thu, 20 Oct 2005 20:45:06 +0200 (CEST)
Subject: [Rd] image() with all NAs fails (PR#8228)
Message-ID: <20051020184506.BA06F20C07@slim.kubism.ku.dk>

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



[Rd] image() with all NAs fails (PR#8228)
murdoch@stats.uwo.ca