Emil, thanks for very nice explanation. Wish base drop would have same behavior as abind::adrop.
чт, 22 нояб. 2018 г., 17:47 Emil Bode emil.b...@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-boun...@r-project.org on behalf of selivanov.dmit...@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 <ruipbarra...@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@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel