[Rd] xy.coords

Gabor Grothendieck ggrothendieck at gmail.com
Sat Dec 31 22:09:01 CET 2005


On 12/31/05, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 12/31/2005 3:26 PM, Gabor Grothendieck wrote:
> > I think this is just playng with words.
>
> I'm starting to be convinced of that by the fact that you haven't posted
> any sample code where using a single parameter would be desirable.

Loose coupling is a general principle that should be followed as a matter
of course and does not need case by case justification.  If there were
a performance issue, say, one might justify circumventing
otherwise desirable principles but there is no conflicting tradeoff here.


>
> The fact that its always been
> > like that is not sufficient and is not related to consistency.
> > xyz.coords also does not work in accordance with the help file
> > so the fact that the error extends to it just means they are both
> > in error.
>
> >
> > Modularity means loose coupling -- i.e. a function should be
> > as independent as possible from its surroundings.  The fact
> > that the second argument is not missing in uses within R base
> > is not a valid argument for appropriate attention to this principle.
> >
> > Furthermore, its clear that the current way it works is not even
> > the intended way -- the intended and better way is as documented
> > and the software, not the documentation, ought to be changed.
>
> Take a look at the examples.  It's pretty clear that it is working as
> intended, and the documentation incorrectly says "missing" where it
> means "NULL".
>
> Duncan Murdoch
> >
> >
> > On 12/31/05, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> >
> >>On 12/31/2005 12:57 PM, Gabor Grothendieck wrote:
> >>
> >>>It does not achieve design consistency.
> >>
> >>It's consistent with the way it has been for at least 7 years, and is
> >>consistent with xyz.coords().
> >>
> >>One would have to
> >>
> >>>specify NULL but that should not really be necessary.
> >>
> >>In fact, one almost never needs to specify NULL there.  It's the default
> >>value for y in the high level functions that call xy.coords, so it is
> >>put there automatically.
> >>
> >>Duncan Murdoch
> >>
> >>
> >>>On 12/31/05, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> >>>
> >>>
> >>>>On 12/31/2005 12:21 PM, Gabor Grothendieck wrote:
> >>>>
> >>>>
> >>>>>I think the point is that (1) it does not work as documented and (2) in
> >>>>>most functions one can omit unnecessary args without having
> >>>>>to specify NULL so its behvaior seems inconsistent from a design
> >>>>>viewpoint.  By allowing either missing or NULL it will work as documented,
> >>>>>and probably intended, yet continue to be backward compatible with
> >>>>>existing usages.
> >>>>
> >>>>But a simpler change is to change the documentation, and it achieves all
> >>>>of those objectives.
> >>>>
> >>>>Duncan Murdoch
> >>>>
> >>>>
> >>>>>On 12/31/05, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>>>On 12/31/2005 8:57 AM, Gabor Grothendieck wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>It could be changed to missing(y) || is.null(y) and the docs amended.
> >>>>>>>That way existing code will continue to work and code that otherwise
> >>>>>>>gives an error currently, but should have worked, will now work too.
> >>>>>>
> >>>>>>Can you give an example where you would want to use xy.coords(y ~ x)?
> >>>>>>Normally xy.coords() is used in other functions, and they can default y
> >>>>>>to NULL (see plot.default, for example).
> >>>>>>
> >>>>>>Duncan Murdoch
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>On 12/31/05, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>On 12/30/2005 10:10 PM, Gabor Grothendieck wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>In ?xy.coords it says:
> >>>>>>>>>
> >>>>>>>>>  If 'y' is missing and 'x' is a
> >>>>>>>>>
> >>>>>>>>>  formula: of the form 'yvar ~ xvar'. 'xvar' and 'yvar' are used as
> >>>>>>>>>       x and y variables.
> >>>>>>>>>
> >>>>>>>>>  list: containing components 'x' and 'y', these are used to define
> >>>>>>>>>       plotting coordinates.
> >>>>>>>>>
> >>>>>>>>>  time series: the x values are taken to be 'time(x)' and the y
> >>>>>>>>>       values to be the time series.
> >>>>>>>>>
> >>>>>>>>>  matrix with two columns: the first is assumed to contain the x
> >>>>>>>>>       values and the second the y values.
> >>>>>>>>>
> >>>>>>>>>however, in fact, if y is missing an error is given. e.g.
> >>>>>>>>>
> >>>>>>>>>x <- 1:3
> >>>>>>>>>y <- 4:6
> >>>>>>>>>xy.coords(y ~ x) # error
> >>>>>>>>>xy.coords(cbind(x, y)) # error
> >>>>>>>>>xy.coords(ts(y)) # error
> >>>>>>>>>
> >>>>>>>>>Looking at the code, is.null(y) in the first line of the
> >>>>>>>>>body should be missing(y) .
> >>>>>>>>
> >>>>>>>>It would be better to change the docs to say "if 'y' is NULL ...".  The
> >>>>>>>>code has been the way it is for years and years, and is widely used.
> >>>>>>>>
> >>>>>>>>Changing the test to missing(y) would mean all existing uses that put a
> >>>>>>>>NULL there would need to be changed.
> >>>>>>>>
> >>>>>>>>Adding a default value of NULL to y would have less impact, but I'd
> >>>>>>>>still be worried about it having long-range bad effects.
> >>>>>>>>
> >>>>>>>>Duncan Murdoch
> >>>>>>>>
> >>>>>>
> >>>>>>
> >>>______________________________________________
> >>>R-devel at r-project.org mailing list
> >>>https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >>
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



More information about the R-devel mailing list