Às 17:33 de 29/09/2023, Joseph Wood escreveu:
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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Hello,
You are using the default behavior for objects of class "array" (and
"matrix"), which is drop = TRUE. See ?`[`.
You probably want the second example below.
b <- array(1:6, dim = c(1, 6, 1))
# the default is drop = TRUE
b[1,,]
#> [1] 1 2 3 4 5 6
# keep the dim attribute
b[1, , , drop = FALSE]
#> , , 1
#>
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1 2 3 4 5 6
Hope this helps,
Rui Barradas
--
Este e-mail foi analisado pelo software antivírus AVG para verificar a presença
de vírus.
www.avg.com
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel