Matrizes
Para uma revisão sobre matrizes na Álgebra Linear veja Matrizes
Uma matriz é um objeto de duas dimensões, um conjunto de elementos organizados em linhas e colunas. Todos os componentes de uma matriz devem ser do mesmo tipo. Uma matriz Mm×n contém m linhas e n colunas. Em R uma matriz pode ser criada à partir de um vetor, através da função matrix()
:
> # Criando uma matriz de 4 linhas e 5 colunas > n <- matrix(1:20, nrow=4, ncol=5) > n [,1] [,2] [,3] [,4] [,5] [1,] 1 5 9 13 17 [2,] 2 6 10 14 18 [3,] 3 7 11 15 19 [4,] 4 8 12 16 20 > # Por default as colunas são preenchidas por colunas. > # Para preencher por linhas fazemos > m <- matrix(1:20, nrow=4, ncol=5, byrow=TRUE) > m [,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 6 7 8 9 10 [3,] 11 12 13 14 15 [4,] 16 17 18 19 20 > # Os elementos podem ser lidos diretamente > m[3,4] [1] 14 > # A n-ésima linha pode ser obtida (fazendo n=2) > m[2,] [1] 6 7 8 9 10 > # A n-ésima coluna pode ser obtida (n=3) > m[,3] [1] 3 8 13 18 > # O segundo elemento da terceira coluna é > m[,3][2] [1] 8 > # O mesmo que > m[2,3] [1] 8 > # Mais de uma coluna pode ser extraída > # Extraindo a 1a e 3a coluna da matriz m > m [, c(1,3)] [,1] [,2] [1,] 1 3 [2,] 6 8 [3,] 11 13 [4,] 16 18 > # Uma matrix também pode ser declarada sem ter seus elementos definidos > matr <- matrix(nrow=3,ncol=2) > matr [,1] [,2] [1,] NA NA [2,] NA NA [3,] NA NA > # NA é a forma de R representar que o valor não está disponível > # A matrix pode ser populada em seguida: > matr[1,1] <- 1 > matr[1,2] <- 4 # etc. > # Matrizes, como vetores, possuem atributos. > attributes(m) $ dim [1] 4 5 > # A matriz m possui apenas o atributo dimensão > dim(m) [1] 4 5 > # 4 linhas e 5 colunas. > # Uma matriz pode ser criada associando-se dimensões à um vetor > k <- 1:10 > k [1] 1 2 3 4 5 6 7 8 9 10 > dim(k) <- c(2,5) > k [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 > # Finalmente matrizes podem ser criadas por agrupamento de colunas > x <- 1:3 > y <- 10:12 > cbind(x,y) x y [1,] 1 10 [2,] 2 11 [3,] 3 12 > # ou agrupamento de linhas > rbind(x,y) [,1] [,2] [,3] x 1 2 3 y 10 11 12 > # Os argumentos de rbind e cbind são vetores ou matrizes. > # Por ex., se xy = rbind(x,y) então > rbind(x,xy) [,1] [,2] [,3] x 1 2 3 x 1 2 3 y 10 11 12 > # As dimensões devem ser compatíveis ou os argumentos podem ser truncados > rbind(xy, 100:104) [,1] [,2] [,3] x 1 2 3 y 10 11 12 100 101 102 Warning message: In rbind(xy, 100:104) : number of columns of result is not a multiple of vector length (arg 2) > # Uma mensagem de erro foi gerada. > > # Uma matrix pode ser criada com atributos m linhas, n colunas > # juntamente com nomes para as linhas e colunas > celulas <- c(11, 12, 21, 22) > nomesLinhas <- c("Linha 1", "Linha 2") > nomesColunas <- c("Coluna 1", "Coluna 2") > matriz <- matrix(celulas, nrow=2, ncol=2, byrow=TRUE, dimnames=list(nomesLinhas, nomesColunas)) > matriz Coluna 1 Coluna 2 Linha 1 11 12 Linha 2 21 22 > > # Esta matriz tem atributos dim (dimensões 2X2) e dimnames > attributes(matriz) $dim [1] 2 2 $dimnames $dimnames[[1]] [1] "Linha 1" "Linha 2" $dimnames[[2]] [1] "Coluna 1" "Coluna 2" > # Os nomes das linhas e colunas podem ser lidos e alterados > colnames(matriz) [1] "Coluna 1" "Coluna 2" > colnames(matriz) <- c("col1", "col2") > row.names(matriz) [1] "Linha 1" "Linha 2" > row.names(matriz) <- c("lin1" , "lin2") > # Agora a matriz tem novos atributos names > matriz col1 col2 lin1 11 12 lin2 21 22 > # O nome de uma linha (ou coluna) pode ser alterado isoladamente > row.names(matriz)[2] <- "linha dois" > matriz col1 col2 lin1 11 12 linha dois 21 22
Os seguintes funções foram usadas para a criação, acesso e manipulação de matrizes:
Função | Efeito |
---|---|
M = matrix(vetor, nrow=m, ncol=n, byrow=TRUE) | cria matriz Mm x n usando os elementos do vetor, distribuídos por linhas |
matriz[m,n] | retorna o elemento Mm,n |
matriz[m,n] <- q | associa o valor q ao elemento Mm,n |
matriz[m,] | retorna a m-ésima linha da matriz M |
matriz[,n] | retorna a n-ésima coluna da matriz M |
attributes(M) | exibe atributos da matriz M |
rbind(x, y) | junta por linhas os objetos x, y |
cbind(x, y) | junta por colunas os objetos x, y |
colnames(M) | exibe (ou atribue) nomes para as colunas de M |
row.names(M) | exibe (ou atribue) nomes para as linhas de M |
Arrays
Arrays são generalizações dos objetos matrizes e são manipulados de forma semelhante. Um array de dimensões 2 × 3 × 5 pode ser visto como uma coleção de 5 matrizes 2 × 3. Para efeito de sua representação no console elas são representadas exatamente desta forma.
> arr <- array(1:12, c(2, 3, 2)) > arr , , 1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 , , 2 [,1] [,2] [,3] [1,] 7 9 11 [2,] 8 10 12 > # Como vemos acima o componente [,, 2] é uma matriz 2 por 3 > arr[,,2] [,1] [,2] [,3] [1,] 7 9 11 [2,] 8 10 12 > # que tem na primeira linha e segunda coluna o valor > arr[,,2][1,2] [1] 9 > > # Um array pode ser construído com seus atributos names > # Um ex, a terceira dimensão do array representa valores em anos diversos > dim1 <- c("Filho 1","Filho 2") > dim2 <- c("Educação", "Saúde", "Alimentação") > dim3 <- c("2010", "2011") > Despesas <- array(, c(2, 3, 2), dimnames=list(dim1, dim2, dim3)) > # Todos os elementos são 'NA'Despesas > Despesas[1,1,1]<-90.80 > Despesas[1,1,2]<-98.80 > Despesas , , 2010 Educação Saúde Alimentação Filho 1 90.8 NA NA Filho 2 NA NA NA , , 2011 Educação Saúde Alimentação Filho 1 98.8 NA NA Filho 2 NA NA NA > Despesas["Filho 1",,] 2010 2011 Educação 90.8 98.8 Saúde NA NA Alimentação NA NA > Despesas["Filho 1","Saúde","2010"]<-456 > Despesas["Filho 1","Saúde","2010"] [1] 456 > Despesas["Filho 1",,] 2010 2011 Educação 90.8 98.8 Saúde 456.0 NA Alimentação NA NA