From emil@bode @ending from d@n@@kn@w@nl  Thu Nov 22 14:47:19 2018
From: emil@bode @ending from d@n@@kn@w@nl (Emil Bode)
Date: Thu, 22 Nov 2018 13:47:19 +0000
Subject: [Rd] Subsetting row in single column matrix drops names in
 resulting vector
In-Reply-To: <CAJdZCv3YC++9uonxm9LjuEx7E-ocAav-bpcwXqL9HMzJoPFyYA@mail.gmail.com>
References: <CAJdZCv0qGoOG6a0V1uzg7tgDRQUjkzn4We=tkb_N1770nr+MHg@mail.gmail.com>
 <4e29953f-7542-c4b1-ffd3-fa32d857f715@sapo.pt>
 <CAJdZCv3YC++9uonxm9LjuEx7E-ocAav-bpcwXqL9HMzJoPFyYA@mail.gmail.com>
Message-ID: <84047FFB-19C7-46B7-80B8-6947DE9E1C65@dans.knaw.nl>

The problem is that the drop is only applied (or not) after the subsetting, so what R does is:
- Getting the subset, which means a 1 x 1 matrix.
- Only then It either returns that as is (when drop=FALSE), or removes ALL dimensions of extent 1, regardless of whether these are rows or columns (or higher dimensions).
And it can't keep any names, because what name should be returned? The name 'row1' is just as valid as 'col1'.
I guess if we could design everything anew, a solution would be to be able to specify something like a[1,,drop='row'], or a[1,,drop=1] to drop the rows but keep columns, and get a vector being equal to 'row1' (which in this case just has length-1, and names 'col1')
That not how it's designed, but you could use 'adrop()' from the 'abind' package:
abind:: adrop(a[1,,drop=FALSE], drop=1) first subsets, then drops the row-dimension, so gives what you're looking for.
Hope this solves your problem.

Best regards, 
Emil Bode
 

?On 21/11/2018, 17:58, "R-devel on behalf of Dmitriy Selivanov" <r-devel-bounces at r-project.org on behalf of selivanov.dmitriy at gmail.com> wrote:

    Hi Rui. Thanks for answer, I'm aware of drop = FALSE option. Unfortunately
    it doesn't resolve the issue - I'm expecting to get a vector, not a matrix .
    
    ??, 21 ????. 2018 ?. ? 20:54, Rui Barradas <ruipbarradas at sapo.pt>:
    
    > Hello,
    >
    > Use drop = FALSE.
    >
    > a[1, , drop = FALSE]
    > #     col1
    > #row1    1
    >
    >
    > Hope this helps,
    >
    > Rui Barradas
    >
    > ?s 16:51 de 21/11/2018, Dmitriy Selivanov escreveu:
    > > Hello here. I'm struggling to understand R's subsetting behavior in
    > couple
    > > of edge cases - subsetting row in a single column matrix and subsetting
    > > column in a single row matrix. I've read R's docs several times and
    > haven't
    > > found answer.
    > >
    > > 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.
    > >
    > >
    >
    
    
    -- 
    Regards
    Dmitriy Selivanov
    
    	[[alternative HTML version deleted]]
    
    ______________________________________________
    R-devel at r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel
    


[Rd] Subsetting row in single column matrix drops names in resulting vector
Emil Bode