[R] Confusing concept of vector and matrix in R

Charles C. Berry cberry at tajo.ucsd.edu
Tue Apr 27 03:40:26 CEST 2010


On Mon, 26 Apr 2010, Stu wrote:

> Hi all,
>
> One subtlety is that the drop argument only works if you specify 2 or
> more indices e.g. [i, j, ..., drop=F]; but not for a single index e.g
> [i, drop=F].

Wrong.

> a <- structure(1:5,dim=5)
> dim(a)
[1] 5
> dim(a[2:3,drop=F]) # don't drop regardless
[1] 2
> dim(a[2,drop=F]) # dont' drop regardless
[1] 1
> dim(a[2:3,drop=T]) # no extent of length 1
[1] 2
> dim(a[2,drop=T]) # drop, extent of length 1
NULL


>
> Why doesn't R complain about the unused "drop=F" argument in the
> single index case?

In the example you give (one index for a two-dimension array), vector 
indexing is assumed. For vector indexing, drop is irrelevant.

HTH,

Chuck
>
> Cheers,
> - Stu
>
> a = matrix(1:10, nrow=1)
> b = matrix(10:1, ncol=1)
>
> # a1 is an vector w/o dim attribute (i.e. drop=F is ignored silently)
> (a1 = a[2:5, drop=F])
> dim(a1)
>
> # a2 is an vector WITH dim attribute: a row matrix (drop=F works)
> (a2 = a[, 2:5, drop=F])
> dim(a2)
>
> # b1 is an vector w/o dim attribute (i.e. drop=F is ignored silently)
> (b1 = b[2:5, drop=F])
> dim(b1)
>
> # b2 is an vector WITH dim attribute: a column matrix (drop=F works)
> (b2 = b[2:5, , drop=F])
> dim(b2)
>
>
> On Mar 30, 4:08 pm, lith <minil... at gmail.com> wrote:
>>> Reframe the problem. Rethink why you need to keep dimensions. I never ever had to use drop.
>>
>> The problem is that the type of the return value changes if you happen
>> to forget to use drop = FALSE, which can easily turn into a nightmare:
>>
>> m <-matrix(1:20, ncol=4)
>> for (i in seq(3, 1, -1)) {
>>     print(class(m[1:i, ]))}
>>
>> [1] "matrix"
>> [1] "matrix"
>> [1] "integer"
>>
>> ______________________________________________
>> R-h... at r-project.org mailing listhttps://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

Charles C. Berry                            (858) 534-2098
                                             Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu	            UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901



More information about the R-help mailing list