[R] x[0]: Can '0' be made an allowed index in R?
Richard O'Keefe
r@oknz @end|ng |rom gm@||@com
Wed Apr 24 10:42:22 CEST 2024
No, my claim ISN'T false, In fact, it CANNOT be.
Here's my claim again, in slow speed.
1. The goal is to get the EFFECT of 0-origin indexing, Not
necessarily the syntax.
2. Rule A. NO NEW DATA TYPES.
3, Rule B. NO CHANGES TO EXISTING OPERATIONS, INCLUDING "[" and "[<-",
>From rules A and B, it follows that EXISTING OPERATIONS (which aren't changed)
continue to work on EXISTING DATA TYPES (which aren't changed) because
NOTHING RELEVANT CHANGES.
4. Rule C. As a consequence of rules A and B, to accomplish the goal we should
DEFINE A NEW OPERATION with a new name that does whatever we want it to.
5. Because existing code does not call the new operation (it's a new name),
it does not break. (OK, if something depends on the absence of "elt",
that could
break. But code that depends on the absence of variables is broken already.)
6. The specific proposal was
elt <- function (x, i) x[i+1]
"elt<-" <- function (x, i, value) { x[i+1] <- value; x }
7, with the implication that you can use any name you like
8. and the perhaps less obvious implication that these definitions can
be local to
a function or a namespace.
The idea is that instead of foobar[0] with a modified data type for foobar or a
modified definition for "[" you write elt(foobar, 0) which obviously
isn't a normal
use of "[".
If you can explain how this breaks normal indexing, pray do so.
On Wed, 24 Apr 2024 at 13:20, Bert Gunter <bgunter.4567 using gmail.com> wrote:
>
> "This works with any single-index value, and lets all the existing
> operations for such values continue to work."
>
> As Peter Dalgaard already pointed out, that is false.
>
> > x <- 1:4
> > x[-1]
> [1] 2 3 4
> > elt(x,-0)
> [1] 1
>
> Cheers,
> Bert
>
> On Tue, Apr 23, 2024 at 4:55 PM Richard O'Keefe <raoknz using gmail.com> wrote:
> >
> > Does it have to use square bracket syntax?
> > elt <- function (x, i) x[i+1]
> > "elt<-" <- function (x, i, value) { x[i+1] <- value; x }
> >
> > > u <- c("A","B","C")
> > > elt(u,0)
> > [1] "A"
> > > elt(u,length(u)-1)
> > [1] "C"
> > > elt(u,0) <- "Z"
> > > u
> > [1] "Z" "B" "C"
> >
> > This works with any single-index value, and lets all the existing
> > operations for such values continue to work. It seems to me to be the
> > simplest and cleanest way to do things, and has the advantage of
> > highlighting to a human reader that this is NOT normal R indexing.
> >
> > On Sun, 21 Apr 2024 at 19:56, Hans W <hwborchers using gmail.com> wrote:
> > >
> > > As we all know, in R indices for vectors start with 1, i.e, x[0] is not a
> > > correct expression. Some algorithms, e.g. in graph theory or combinatorics,
> > > are much easier to formulate and code if 0 is an allowed index pointing to
> > > the first element of the vector.
> > >
> > > Some programming languages, for instance Julia (where the index for normal
> > > vectors also starts with 1), provide libraries/packages that allow the user
> > > to define an index range for its vectors, say 0:9 or 10:20 or even negative
> > > indices.
> > >
> > > Of course, this notation would only be feasible for certain specially
> > > defined vectors. Is there a library that provides this functionality?
> > > Or is there a simple trick to do this in R? The expression 'x[0]' must
> > > be possible, does this mean the syntax of R has to be twisted somehow?
> > >
> > > Thanks, Hans W.
> > >
> > > [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list