[R] zero-offset matrices

Jonathan Rougier J.C.Rougier at durham.ac.uk
Tue Mar 2 16:29:22 CET 1999


On Tue, 2 Mar 1999, Prof Brian Ripley wrote:

> > Has anyone written subscripting methods for matrices which are indexed
> > from zero? i.e. functions such as "[.zoffset" and "[<-.zoffset" which

> No, but should it not be very easy? Just check if the subscript is
> numeric, add 1, call NextMethod? Let's see:

>>> [showing how it is not easy!]

> So perhaps someone who really understands R will tell me what is going
> on here. 

I have had a similar experience!  I am not sure what is going on either,
but I have a working solution as follows ...

"[.zoffset" <-
function (x, i = rep(T, nrow(x)), j = rep(T, ncol(x)), ...) 
{
    x <- unclass(x)
    if (!is.logical(i)) {
        tmp <- rep(F, nrow(x))
        tmp[i + 1] <- T
        i <- tmp
    }
    if (!is.logical(j)) {
        tmp <- rep(F, ncol(x))
        tmp[j + 1] <- T
        j <- tmp
    }
    x[i, j, ...]
}

"[<-.zoffset" <-
function (x, i = rep(T, nrow(x)), j = rep(T, ncol(x)), value) 
{
    x <- unclass(x)
    if (!is.logical(i)) {
        tmp <- rep(F, nrow(x))
        tmp[i + 1] <- T
        i <- tmp
    }
    if (!is.logical(j)) {
        tmp <- rep(F, ncol(x))
        tmp[j + 1] <- T
        j <- tmp
    }
    x[i, j] <- value
    structure(x, class = "zoffset")
}

It is a bit clumsy, but it handles all the usual subscripting cases,
including things like

fred[, 0:2] <- NA

Cheers, Jonathan.

Jonathan Rougier                       Science Laboratories
Department of Mathematical Sciences    South Road
University of Durham                   Durham DH1 3LE

"[B]egin upon the precept ... that the things we see are to be 
 weighed in the scale with what we know"  (Meredith, 1879, The Egoist)

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list