[Rd] surprised matrix (1:256, 8, 8) doesn't cause error/warning

Abby Spurdle (/əˈbi/) @purd|e@@ @end|ng |rom gm@||@com
Tue Feb 2 00:27:05 CET 2021


So, does that mean that a clean result is contingent on the length of
the data being a multiple of both the number of rows and columns?

However, this rule is not straightforward.

> #EXAMPLE 1
> #what I would expect
> matrix (1:12, 0, 0)
<0 x 0 matrix>
Warning message:
In matrix(1:12, 0, 0) : data length exceeds size of matrix

> #EXAMPLE 2
> #don't like this
> matrix (numeric (), 2, 3)
     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA

The first example is what I would expect, but is inconsistent with the
previous examples.
(Because zero is a valid multiple of twelve).

I dislike the second example with recycling of a zero-length vector.
This *is* covered in the help file, but also seems inconsistent with
the previous examples.
(Because two and three are not valid multiples of zero).

Also, I can't think of any reason why someone would want to construct
a matrix with extra data, and then discard part of it.
And even if there was, then why not allow an arbitrarily longer length?


On Mon, Feb 1, 2021 at 10:08 PM Martin Maechler
<maechler using stat.math.ethz.ch> wrote:
>
> >>>>> Abby Spurdle (/əˈbi/)
> >>>>>     on Mon, 1 Feb 2021 19:50:32 +1300 writes:
>
>     > I'm a little surprised that the following doesn't trigger an error or a warning.
>     > matrix (1:256, 8, 8)
>
>     > The help file says that the main argument is recycled, if it's too short.
>     > But doesn't say what happens if it's too long.
>
> It's somewhat subtler than one may assume :
>
> > matrix(1:9, 2,3)
>      [,1] [,2] [,3]
> [1,]    1    3    5
> [2,]    2    4    6
> Warning message:
> In matrix(1:9, 2, 3) :
>   data length [9] is not a sub-multiple or multiple of the number of rows [2]
>
> > matrix(1:8, 2,3)
>      [,1] [,2] [,3]
> [1,]    1    3    5
> [2,]    2    4    6
> Warning message:
> In matrix(1:8, 2, 3) :
>   data length [8] is not a sub-multiple or multiple of the number of columns [3]
>
> > matrix(1:12, 2,3)
>      [,1] [,2] [,3]
> [1,]    1    3    5
> [2,]    2    4    6
> >
>
> So it looks to me the current behavior is quite on purpose.
> Are you sure it's not documented at all when reading the docs
> carefully?  (I did *not*, just now).



More information about the R-devel mailing list