Às 09:08 de 21/04/2024, Rui Barradas escreveu:
Às 08:55 de 21/04/2024, Hans W escreveu:
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@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.
Hello,

I find what you are asking awkward but it can be done with S3 classes.
Write an extraction method for the new class and in the use case below it works. The method increments the ndex before calling NextMethod, the usual extraction function.


`[.zerobased` <- function(x, i, ...) {
   i <- i + 1L
   NextMethod()
}
as_zerobased <- function(x) {
   class(x) <- c("zerobased", class(x))
   x
}

x <- 1:10
y <- as_zerobased(x)

y[0]
#> [1] 1
y[1]
#> [1] 2
y[9]
#> [1] 10
y[10]
#> [1] NA


Hope this helps,

Rui Barradas


Sorry, forgot to also define a `[[zerobased` method. It's probably safer.


`[[.zerobased` <- function(x, i, ...) {
  i <- i + 1L
  NextMethod()
}


Hope this helps,

Rui Barradas


--
Este e-mail foi analisado pelo software antivírus AVG para verificar a presença 
de vírus.
www.avg.com

______________________________________________
R-help@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.

Reply via email to