[Rd] Bug in "[<-.matrix"? (Was: Feature Request: "matrix[1:10,1:10, block=F] <- 1:10")

Prof Brian Ripley ripley@stats.ox.ac.uk
Thu, 21 Feb 2002 06:48:25 +0000 (GMT)


On Wed, 20 Feb 2002, Warnes, Gregory R wrote:

> Thanks to David Meyer [david.meyer@ci.tuwien.ac.at] and David Brahm
> [brahm@alum.mit.edu] who suggested:
>
>   m[ cbind(index.i, index.j) ] <- vals
>
> This works fine for the example I gave.
>
> Unfortunately, this approach doesn't extend to using the row and column
> names to make assignments:
>
> > m <- matrix("",ncol=3,nrow=3)
> > dimnames(m) <- list(c("a","b","c"), c("A","B","C"))
> > m
>   A  B  C
> a "" "" ""
> b "" "" ""
> c "" "" ""
> >
> > index.i <- c("b","a","c")
> > index.j <- c("B","A","C")
> > vals <- c("1","2","3")
> >
> > m[ cbind(index.i, index.j) ] <- vals
> > m
>                                       b   a   c   B   A   C
>  ""  ""  ""  ""  ""  ""  ""  ""  "" "1" "2" "3" "1" "2" "3"
>
> This looks like a bug...

It's as documented.  Take a look at e.g. the description of indexing
in Venables & Ripley.  You can use match() to turn names into numbers.

>From the R Language Definition:

    It is possible to use a matrix of integers as an index ...

S throws an error in your example, and perhaps R should too.  But not
giving errors when used in undocumented ways is not a bug.

-- 
Brian D. Ripley,                  ripley@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 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._