[Rd] Use of `[` with array and resulting class

Steve Martin @tevem@rt|n041 @end|ng |rom gm@||@com
Sat Sep 30 06:27:51 CEST 2023


This is due to `[` dropping dimensions by default. In your first
example, think of a[1, , ] as having dimension c(1, 3, 2), but,
because drop = TRUE, all dimensions of extent 1 (the first dimension)
are dropped and the result has dimension c(3, 2). In your second
example, b[1, , ] would have dimension c(1, 6, 1), but now both the
first and third dimensions are dropped, resulting in a vector with no
dimensions.

We can use the drop function to explicitly see why b[1, ,] doesn't
result in a matrix.

> drop(matrix(1:6, 6, 1))
[1] 1 2 3 4 5 6

Steve

On Fri, 29 Sept 2023 at 23:28, Joseph Wood <jwood000 using gmail.com> wrote:
>
> Hello,
>
> I recently discovered a possible inconsistency with usage of an object of
> class array.
>
> Consider the following example:
>
> ## Setup
>
> a <- array(1:6, dim = c(1, 3, 2))
> a
> , , 1
>
>      [,1] [,2] [,3]
> [1,]    1    2    3
>
> , , 2
>
>      [,1] [,2] [,3]
> [1,]    4    5    6
>
> class(a)
> [1] "array"
>
> dim(a)
> [1] 1 3 2
>
> ## Now use `[`
> a[1,,]
>      [,1] [,2]
> [1,]    1    4
> [2,]    2    5
> [3,]    3    6
>
> class(a[1,,])
> [1] "matrix" "array"
>
> dim(a[1,,])
> [1] 3 2
>
> Up until this point, it makes sense to me. Now, let's consider when dim =
> c(1, 6, 1). This is where I have a little trouble understanding the
> behavior.
>
> ## Array with dim = c(1, any_number_here, 1)
>
> b <- array(1:6, dim = c(1, 6, 1))
> b
> , , 1
>
>      [,1] [,2] [,3] [,4] [,5] [,6]
> [1,]    1    2    3    4    5    6
>
> class(b)
> [1] "array"
>
> dim(b)
> [1] 1 6 1
>
> ## The problem
>
> b[1,,]
> [1] 1 2 3 4 5 6
>
> dim(b[1,,])
> NULL
>
> class(b[1,,])
> [1] "integer"
>
> I would have expected:
>
> b[1,,] ## produced the output with matrix(1:6, ncol = 1)
>      [,1]
> [1,]    1
> [2,]    2
> [3,]    3
> [4,]    4
> [5,]    5
> [6,]    6
>
> class(b[1,,])
> [1] "matrix" "array"
>
> dim(b[1,,])
> [1] 3 1
>
> Is this a bug? If not, any help understanding this behaviour would be much
> appreciated.
>
> Thanks,
> Joseph
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list