[Rd] Antwort: Re: Inconsistency with matrix indexing (PR#8214)
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Oct 18 15:50:59 CEST 2005
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
I don't agree with your suggestion. mat[1, , drop = FALSE] is a 1x3
matrix, with both row and column names. Indexing it by [1] says that
you want to treat it as a vector, and give the first element. How could
R know whether to keep the row or column name for that [1,1] element?
What should it do with the expression
mat[1,1 , drop = FALSE][1]
?
If you are really concerned about the names, you should use matrix
indexing in both places with drop = FALSE:
> mat[1, , drop = FALSE][1,1,drop=FALSE]
c1
r1 1
Duncan Murdoch
>
> In both cases
>> mat[1, , drop = FALSE]
> c1 c2 c3
> r1 1 4 7
>
> I would strongly prefer to retain the row index r1 above.
> Of course, you could argue that mat[1, , drop = FALSE][1] relates to the
> column name c1. However, I think the lower dimension is a vector and this
> typically a column with row names. Most likely, a wiser and more concise
> interpretation than the mine is necessary, but the problem of dropping and
> loosing information is quite evident in any case.
>
> Still, I believe, my suggestion below is justified. Things like this
> happen quite often to me and it regularly takes time and effort to rectify
> the problem.
> Retaining the matrix features in sames could really be an advantage and
> avoid many if's and other workarounds.
>
> Many thanks and best regards,
> Stefan
>
>
>
> Duncan Murdoch <murdoch at stats.uwo.ca>
> 2005-10-18 14:33
>
> An
> stefan.albrecht at allianz.com
> Kopie
> r-devel at stat.math.ethz.ch, R-bugs at biostat.ku.dk
> Thema
> Re: [Rd] Inconsistency with matrix indexing (PR#8214)
>
>
>
>
>
>
> stefan.albrecht at allianz.com wrote:
>> Full_Name: Stefan Albrecht
>> Version: 2.2.0
>> OS: Windows XP
>> Submission from: (NULL) (194.127.2.74)
>>
>>
>> Dear all,
>>
>> in the new R 2.2.0, the matrix indexing has been changed.
>
> I just tried your code in R 2.0.1 and 2.1.1, and got the same output as
> you did. Which version are you comparing to?
>
> Duncan Murdoch
>
>
> In my opinion, this
>> leads to an inconsistency when indexing one-row matrices.
>> Take
>>
>>>(mat <- matrix(1:9, nrow = 3, dimnames = list(paste("r", 1:3, sep = ""),
>>
>> paste("c", 1:3, sep = ""))))
>> c1 c2 c3
>> r1 1 4 7
>> r2 2 5 8
>> r3 3 6 9
>>
>> Now taking the first row of the first-row of mat preserves the column
> names
>>
>>>mat[1, , drop = FALSE][1, ]
>>
>> c1 c2 c3
>> 1 4 7
>>
>> This is not true for the first column of the first-row of mat
>>
>>>mat[1, , drop = FALSE][, 1]
>>
>> [1] 1
>>
>> However, for the first column of the first two rows of mat the row names
> are
>> retained
>>
>>>mat[1:2, , drop = FALSE][, 1]
>>
>> r1 r2
>> 1 2
>>
>> This feature can lead to problems when indexing matrixes of different
> row
>> numbers, since the row names are not preserved in all cases.
>>
>> I suggest to preseve the row names also for
>>
>>>mat[1, , drop = FALSE][, 1]
>>
>>
>> Would it be possible to implement this feature? Many thanks.
>>
>> With best regards,
>>
>> Stefan Albrecht
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>
More information about the R-devel
mailing list