[R] seq(2,5,-2) not an error but NULL
Prof Brian Ripley
ripley at stats.ox.ac.uk
Mon Mar 27 14:29:18 CEST 2006
On Mon, 27 Mar 2006, Christian Hoffmann wrote:
> Hi,
>
> This may belong more to r-develop, but general discussion may be useful
> (for the how many-th time ?)
The place for general discussion of changes to R is the R-devel list.
There is almost no scope to change things like this, as there is so much
existing code which relies on it (and it is also compatible with S).
> seq(2,5,-2)
> seq(5,2,2)
>
> both result in
>
> Error in seq.default(2, 5, -2) : wrong sign in 'by' argument
>
> But often, if not always, mathematicians and programmers want a
> behaviour e.g. in for loops, where this statement results in an empty
> statement, that is
>
> for (ii in seq(2,5,-2)) print(ii)
>
> were equivalent to
>
> for (ii in NULL) print(ii).
>
> The relevant part in seq.default is now
>
> if (n < 0)
> stop("wrong sign in 'by' argument")
>
> but could be changed by option to
>
> return(NULL)
Why is NULL plausible? I would think integer(0) is more likely, but if
you think this should not be an error, then another plausible
interpretation is the intersection of {2 ... 5} and {2, 0, -2, ...}, that
is {2}. (The only language I can think of with a close analogue is
Fortran DO loops, where DO 10 I=2,5,-2 used to be {2} and was defined in
F77 to be empty, so I don't think the interpretation is unambiguous.)
[As an aside, one could argue that 'for (ii in NULL)' should be an error,
since the help page says
seq: An expression evaluating to a vector (including a list).
and NULL is not a vector.]
> I think there should be an option to seq requiring this behaviour, or a
> specific function, may be even a special operator, e.g. %;%:
>
> 3;5 resulting in NULL.
>
> What do you think?
It cannot be the default, and if you need it, why not write your own
function to do it? S has survived ca 18 years without it, so the need
cannot be overwhelming.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list