[Rd] Re: [R] More user-friendly error message needed.

Duncan Murdoch dmurdoch at pair.com
Wed Apr 7 21:38:54 CEST 2004


(Moved from r-help to r-devel).

On 07 Apr 2004 15:07:49 -0400, Shin <sdhyok at email.unc.edu> wrote :

>When I tried the following commands, I got a strange message.
>
>
>> x<-data.frame(y=c(1:10))
>> plot(x$z)
>Error in xy.coords(x, y, xlabel, ylabel, log) :
>        x and y lengths differ
>
>"The data frame, x, does not have a field named z."
>may be better user-friendly message for this kind of common error.

There are several places this could be fixed.  When you use x$z, the
code for $ could give an error message or a warning; instead it
returns NULL with no error or warning.  Changing this would probably
be dangerous:  I'd guess there's code out there that relies on getting
a NULL back from a construction like that.  But maybe we should change
that in 2.0?

Then plot(NULL) is called, which eventually results in the message you
saw.  That could be easily fixed:  plot.default could have 

if (is.null(x)) stop("x is NULL")

I can't think of a reason why this would cause trouble.  However, if
you had something like

plot(x$y, x$z)

the error wouldn't be detected.

Finally, the actual error message comes from a bug in the xy.coords
code: it has 

           y <- x
            x <- 1:length(x)

for the case where there is a NULL y supplied, and this is wrong:  it
should be x <- seq(along=x).  Making just this fix gives a fairly
inscrutable error message:

Error in plot.window(xlim, ylim, log, asp, ...) : 
        need finite xlim values
In addition: Warning messages: 
1: no finite arguments to min; returning Inf 
2: no finite arguments to max; returning -Inf 
3: no finite arguments to min; returning Inf 
4: no finite arguments to max; returning -Inf 

but this might be easier to figure out than the original one.

Duncan Murdoch



More information about the R-devel mailing list