[Rd] Subsetting row in single column matrix drops names in resulting vector
Serguei Sokol
@okol @ending from in@@-toulou@e@fr
Tue Nov 27 16:44:15 CET 2018
The reason that multi-[column|row] and one-[column|row] matrices should
be treated in the same way as to names kept in the result sounds good to
me. I withdraw my remark.
Serguei.
Le 27/11/2018 à 15:48, Radford Neal a écrit :
>>> The behaviour of a[1,] is unchanged, for backwards compatibility
>>> reasons. But in pqR one can explicitly mark an argument as
>>> missing using "_". When an array subscript is missing in this way,
>>> the names will not be dropped in this context even if there is
>>> only one of them. So a[1,_] will do what you want:
>>>
>>> > a = matrix(1:2, nrow = 2, dimnames = list(c("row1", "row2"), c("col1")))
>>> > a[1, ]
>>> [1] 1
>>> > a[1,_]
>>> col1
>>> 1
>> To my mind, it's rather counterintuitive as
>>
>>> a[2,_]
>> col1
>> 1
>> so a[1,_] and a[2,_] have the same name. To make it intuitive (at least
>> for me ;) ) it should rather return names "row1" and "row2" respectively.
>>
>> Best,
>> Serguei.
>
> The aim in designing these features should be to make it easier to
> write reliable software, which doesn't unexpectedly fail in edge
> cases.
>
> Here, the fact that a is a matrix presumably means that the program is
> designed to work for more than one column - in fact, it's likely that
> the programmer was mostly thinking of the case where there is more
> than one column, and perhaps only testing that case. But of course
> there is usually no reason why one column (or even zero columns) is
> impossible. We want the program to still work in such cases.
>
> When there is more than one column, a[1,] and a[1,_] both produce a
> vector with the _column_ names attached, and this is certainly not
> going to change (nor should it, unless one wants to change the whole
> semantics of matrices so that rows and columns are treated
> non-symmetrically, and even then attaching the same row name to all
> the elements would be rather strange...).
>
> After v <- a[1,_], the program may well have an expression like v[nc]
> where nc is a column name. We want this to still work if there
> happens to be only one column. That will happen only if a[1,_]
> attaches a column name, not a row name, when a has only one column.
>
> Radford Neal
>
--
Serguei Sokol
Ingenieur de recherche INRA
Cellule mathématiques
LISBP, INSA/INRA UMR 792, INSA/CNRS UMR 5504
135 Avenue de Rangueil
31077 Toulouse Cedex 04
tel: +33 5 62 25 01 27
email: sokol using insa-toulouse.fr
http://www.lisbp.fr
More information about the R-devel
mailing list