A.11 Arranjo
Arranjo é uma estrutura de dados multidimensional. A matriz é um caso particular de arranjo com 2 dimensões: linhas e colunas. Mas podemos ter dados com n dimensões.
Por exemplo, imagine o campo espacial representado por uma grade de espaçamento horizontal regular de uma variável meteorológica. Nessa situação podemos usar uma matriz com valores de temperatura, onde as colunas representam as longitudes e as linhas as latitudes dos pontos da grade. Em um dados tempo, a matriz da variável com valores de temperatura do ar, por exemplo, representa o estado térmico espacial daquele momento. Então podemos dizer que esse arranjo possui 3 dimensões: latitude (linha), longitude (coluna) e tempo (camadas).
A.11.1 Criação
Suponha que os campos espaciais médios mensais de temperatura sejam dados pelo vetor temp_vetor
abaixo.
temp_vetor <- c(
18, 24, 19, 23, 19, 27, 24, 18, 13, 20, 25, 19, 18, 22, 17,
9, 17, 22, 13, 19, 29, 18, 19, 18, 11, 18, 19, 17, 13, 17, 26,
21, 22, 20, 14, 17
)
O vetor temp_vetor
pode ser convertido em um arranjo dos campos espaciais usando a função array()
, com o argumento dim
especificando as dimensões.
temp_array <- array(data = temp_vetor, dim = c(3, 4, 3))
temp_array
#> , , 1
#>
#> [,1] [,2] [,3] [,4]
#> [1,] 18 23 24 20
#> [2,] 24 19 18 25
#> [3,] 19 27 13 19
#>
#> , , 2
#>
#> [,1] [,2] [,3] [,4]
#> [1,] 18 9 13 18
#> [2,] 22 17 19 19
#> [3,] 17 22 29 18
#>
#> , , 3
#>
#> [,1] [,2] [,3] [,4]
#> [1,] 11 17 26 20
#> [2,] 18 13 21 14
#> [3,] 19 17 22 17
dim(temp_array)
#> [1] 3 4 3
class(temp_array)
#> [1] "array"
O arranjo também pode ter atributos, como o nomes das linhas, colunas e camadas.
colnames(temp_array) <- -(45:42)
rownames(temp_array) <- -(19:21)
# nomes das dimensões
dimnames(temp_array)
#> [[1]]
#> [1] "-19" "-20" "-21"
#>
#> [[2]]
#> [1] "-45" "-44" "-43" "-42"
#>
#> [[3]]
#> NULL
# nomes para camadas
dimnames(temp_array)[[3]] <- c("Jan", "Fev", "Mar")
temp_array
#> , , Jan
#>
#> -45 -44 -43 -42
#> -19 18 23 24 20
#> -20 24 19 18 25
#> -21 19 27 13 19
#>
#> , , Fev
#>
#> -45 -44 -43 -42
#> -19 18 9 13 18
#> -20 22 17 19 19
#> -21 17 22 29 18
#>
#> , , Mar
#>
#> -45 -44 -43 -42
#> -19 11 17 26 20
#> -20 18 13 21 14
#> -21 19 17 22 17
A.11.2 Indexação
Os mesmo procedimentos de indexação usados para matriz são aplicados a um arranjo (A), mas com a seguinte convenção de índices A[linha, coluna, camada]
.
# serie temporal do 1º ponto
temp_array[1, 1, ]
#> Jan Fev Mar
#> 18 18 11
temp_array["-19", "-45", ]
#> Jan Fev Mar
#> 18 18 11
# para 1a faixa de latitude (-19),
# os valores de temp das longitudes em todos tempos
temp_array[1, , ]
#> Jan Fev Mar
#> -45 18 18 11
#> -44 23 9 17
#> -43 24 13 26
#> -42 20 18 20
# para 2a faixa de longitude (-44), todas longitudes e tempos
temp_array[, 2, ]
#> Jan Fev Mar
#> -19 23 9 17
#> -20 19 17 13
#> -21 27 22 17
# média meridional
colMeans(temp_array[, 2, ])
#> Jan Fev Mar
#> 23.00000 16.00000 15.66667
# subdominio "espacial"
temp_array[2:3, 2:3, ]
#> , , Jan
#>
#> -44 -43
#> -20 19 18
#> -21 27 13
#>
#> , , Fev
#>
#> -44 -43
#> -20 17 19
#> -21 22 29
#>
#> , , Mar
#>
#> -44 -43
#> -20 13 21
#> -21 17 22
# média espacial do 1o mês
mean(temp_array[, , 1])
#> [1] 20.75
# média espacial do segundo mês
mean(temp_array[, , "Jan"])
#> [1] 20.75
# demanchando o arranjo (conversão para vetor)
c(temp_array)
#> [1] 18 24 19 23 19 27 24 18 13 20 25 19 18 22 17 9 17 22 13 19 29 18 19 18 11
#> [26] 18 19 17 13 17 26 21 22 20 14 17
c(temp_array[, , 1])
#> [1] 18 24 19 23 19 27 24 18 13 20 25 19
# para entender a forma como a matriz é convertida para vetor
mat_temp <- cbind(
mes = rep(1:3, each = 20),
elemat = rep(1:20, times = 6),
valores = c(temp_array),
elearr = 1:(cumprod(dim(temp_array))[3])
)
#> Warning in cbind(mes = rep(1:3, each = 20), elemat = rep(1:20, times = 6), :
#> number of rows of result is not a multiple of vector length (arg 3)
mat_temp
#> mes elemat valores elearr
#> [1,] 1 1 18 1
#> [2,] 1 2 24 2
#> [3,] 1 3 19 3
#> [4,] 1 4 23 4
#> [5,] 1 5 19 5
#> [6,] 1 6 27 6
#> [7,] 1 7 24 7
#> [8,] 1 8 18 8
#> [9,] 1 9 13 9
#> [10,] 1 10 20 10
#> [11,] 1 11 25 11
#> [12,] 1 12 19 12
#> [13,] 1 13 18 13
#> [14,] 1 14 22 14
#> [15,] 1 15 17 15
#> [16,] 1 16 9 16
#> [17,] 1 17 17 17
#> [18,] 1 18 22 18
#> [19,] 1 19 13 19
#> [20,] 1 20 19 20
#> [21,] 2 1 29 21
#> [22,] 2 2 18 22
#> [23,] 2 3 19 23
#> [24,] 2 4 18 24
#> [25,] 2 5 11 25
#> [26,] 2 6 18 26
#> [27,] 2 7 19 27
#> [28,] 2 8 17 28
#> [29,] 2 9 13 29
#> [30,] 2 10 17 30
#> [31,] 2 11 26 31
#> [32,] 2 12 21 32
#> [33,] 2 13 22 33
#> [34,] 2 14 20 34
#> [35,] 2 15 14 35
#> [36,] 2 16 17 36
#> [37,] 2 17 18 1
#> [38,] 2 18 24 2
#> [39,] 2 19 19 3
#> [40,] 2 20 23 4
#> [41,] 3 1 19 5
#> [42,] 3 2 27 6
#> [43,] 3 3 24 7
#> [44,] 3 4 18 8
#> [45,] 3 5 13 9
#> [46,] 3 6 20 10
#> [47,] 3 7 25 11
#> [48,] 3 8 19 12
#> [49,] 3 9 18 13
#> [50,] 3 10 22 14
#> [51,] 3 11 17 15
#> [52,] 3 12 9 16
#> [53,] 3 13 17 17
#> [54,] 3 14 22 18
#> [55,] 3 15 13 19
#> [56,] 3 16 19 20
#> [57,] 3 17 29 21
#> [58,] 3 18 18 22
#> [59,] 3 19 19 23
#> [60,] 3 20 18 24
#> [61,] 1 1 11 25
#> [62,] 1 2 18 26
#> [63,] 1 3 19 27
#> [64,] 1 4 17 28
#> [65,] 1 5 13 29
#> [66,] 1 6 17 30
#> [67,] 1 7 26 31
#> [68,] 1 8 21 32
#> [69,] 1 9 22 33
#> [70,] 1 10 20 34
#> [71,] 1 11 14 35
#> [72,] 1 12 17 36
#> [73,] 1 13 18 1
#> [74,] 1 14 24 2
#> [75,] 1 15 19 3
#> [76,] 1 16 23 4
#> [77,] 1 17 19 5
#> [78,] 1 18 27 6
#> [79,] 1 19 24 7
#> [80,] 1 20 18 8
#> [81,] 2 1 13 9
#> [82,] 2 2 20 10
#> [83,] 2 3 25 11
#> [84,] 2 4 19 12
#> [85,] 2 5 18 13
#> [86,] 2 6 22 14
#> [87,] 2 7 17 15
#> [88,] 2 8 9 16
#> [89,] 2 9 17 17
#> [90,] 2 10 22 18
#> [91,] 2 11 13 19
#> [92,] 2 12 19 20
#> [93,] 2 13 29 21
#> [94,] 2 14 18 22
#> [95,] 2 15 19 23
#> [96,] 2 16 18 24
#> [97,] 2 17 11 25
#> [98,] 2 18 18 26
#> [99,] 2 19 19 27
#> [100,] 2 20 17 28
#> [101,] 3 1 13 29
#> [102,] 3 2 17 30
#> [103,] 3 3 26 31
#> [104,] 3 4 21 32
#> [105,] 3 5 22 33
#> [106,] 3 6 20 34
#> [107,] 3 7 14 35
#> [108,] 3 8 17 36
#> [109,] 3 9 18 1
#> [110,] 3 10 24 2
#> [111,] 3 11 19 3
#> [112,] 3 12 23 4
#> [113,] 3 13 19 5
#> [114,] 3 14 27 6
#> [115,] 3 15 24 7
#> [116,] 3 16 18 8
#> [117,] 3 17 13 9
#> [118,] 3 18 20 10
#> [119,] 3 19 25 11
#> [120,] 3 20 19 12