# [R] Confusing concept of vector and matrix in R

Stuart Andrews stu.andrews at gmail.com
Tue Apr 27 04:36:50 CEST 2010

```Thanks Charles, for clarifying.

My statement holds for matrices, which are 2 dimensional.  And, as you
mentioned, a single index implies vector indexing where the drop
argument doesn't make sense.   I am somewhat relieved, given this new
understanding.

But I am still puzzled as to why R doesn't complain about the unused
"drop=F" argument.  Since this argument is nonsensical, R should tell
me this, no?  For example, when I add an unrecognized argument to the
ls() function I get the following:

> ls(nonsense="42")
Error in ls(nonsense = "42") : unused argument(s) (nonsense = "42")

Cheers,
- Stu

On Apr 26, 2010, at 9:40 PM, Charles C. Berry wrote:

> 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
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> 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
>

```