From maechler at stat.math.ethz.ch  Wed Oct 19 14:08:39 2005
From: maechler at stat.math.ethz.ch (maechler@stat.math.ethz.ch)
Date: Wed, 19 Oct 2005 14:08:39 +0200 (CEST)
Subject: [Rd] Inconsistency with matrix indexing (PR#8214)
Message-ID: <20051019120839.C42A720A8C@slim.kubism.ku.dk>

>>>>> "Duncan" == Duncan Murdoch <murdoch at stats.uwo.ca>
>>>>>     on Tue, 18 Oct 2005 09:50:59 -0400 writes:

    Duncan> On 10/18/2005 9:32 AM, stefan.albrecht at allianz.com wrote:
    >> Dear Duncan,
    >> 
    >> you are right. In both R 2.2.0 and 2.1.1 you get the same result. What has 
    >> actually changed is the following:
    >> In R 2.1.1
    >>> mat[1, , drop = FALSE][1]
    >> r1 
    >> 1 
    >> 
    >> While in R 2.2.0
    >>> mat[1, , drop = FALSE][1]
    >> [1] 1

    Duncan> I don't agree with your suggestion.  mat[1, , drop = FALSE]
    Duncan> is a 1x3 matrix, with both row and column
    Duncan> names.  Indexing it by [1] says that you want to
    Duncan> treat it as a vector, and give the first element.
    Duncan> How could R know whether to keep the row or column
    Duncan> name for that [1,1] element?  What should it do with
    Duncan> the expression

    Duncan> mat[1,1 , drop = FALSE][1]

    Duncan> ?

    Duncan> If you are really concerned about the names, you should use matrix 
    Duncan> indexing in both places with drop = FALSE:

    >> mat[1, , drop = FALSE][1,1,drop=FALSE]
    Duncan> c1
    Duncan> r1  1

    Duncan> Duncan Murdoch

yes, definitely.  There's no bug here, and there was rather a
bug in previous behavior.

Just a simpler example {"for posteriority"}:

> (M <- cbind(a=0:1, b=c(A=2, B=3)))
  a b 
A 0 2
B 1 3
> M[1,2, drop=FALSE]
  b 
A 2
> M[1,2]
[1] 2
> M[2]  ### treat M as vector -> lose names
[1] 1
> M[2:3]
[1] 1 2
>



[Rd] Inconsistency with matrix indexing (PR#8214)
maechler@stat.math.ethz.ch