From @okol @ending from in@@-toulou@e@fr  Tue Nov 27 10:57:10 2018
From: @okol @ending from in@@-toulou@e@fr (Serguei Sokol)
Date: Tue, 27 Nov 2018 10:57:10 +0100
Subject: [Rd] Subsetting row in single column matrix drops names in
 resulting vector
In-Reply-To: <20181127005014.GA17318@mail.cs.toronto.edu>
References: <mailman.47920.7.1542884402.17320.r-devel@r-project.org>
 <20181127005014.GA17318@mail.cs.toronto.edu>
Message-ID: <2ce24835-d693-96a5-ce0b-f8b4df4f6bfc@insa-toulouse.fr>

Le 27/11/2018 ? 01:50, Radford Neal a ?crit?:
> Dmitriy Selivanov (selivanov.dmitriy at gmail.com) wrote:
>
>> Consider following example:
>>
>> a = matrix(1:2, nrow = 2, dimnames = list(c("row1", "row2"), c("col1")))
>> a[1, ]
>> # 1
>>
>> It returns *unnamed* vector `1` where I would expect named vector. In fact
>> it returns named vector when number of columns is > 1.
>> Same issue applicable to single row matrix. Is it a bug? looks very
>> counterintuitive.
> This and related issues are addressed in pqR, in the new
> release of 2018-11-18.  (See pqR-project.org, and my blog
> post at radfordneal.wordpress.com)
>
> 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.
  

>
> Furthermore, pqR will not drop names when the subscript is a
> 1D array (ie, has a length-1 dim attribute) even if it is only
> one long.  In pqR, sequences that are 1D arrays are easily created
> using the .. operator.  So the following works as intended when ..
> is used, but not when the old : operator is used:
>
>    > a = matrix(1:4, nrow=2, dimnames=list(c("row1","row2"),c("col1","col2")))
>    > n = 2
>    > a[1,1:n]
>    col1 col2
>       1    3
>    > a[1,1..n]
>    col1 col2
>       1    3
>    > n = 1
>    > a[1,1:n]
>    [1] 1
>    > a[1,1..n]
>    col1
>       1
>
> You can read more about this in my blog post at
>
> https://radfordneal.wordpress.com/2016/06/25/fixing-rs-design-flaws-in-a-new-version-of-pqr/
>
> That was written when most of these features where introduced,
> though getting your specific example right relies on another
> change introduced in the most recent version.
>
>      Radford Neal
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>


-- 
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 at insa-toulouse.fr
http://www.lisbp.fr



[Rd] Subsetting row in single column matrix drops names in resulting vector
Serguei Sokol