Matrizes

Linguagem R

As matrizes são como os vetores, só que bidimensionais.

nome <- matrix(data = NA , nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

onde:

  • data
    • um vetor de dados opcional, ou um objeto que possa ser transformado em um vetor.
  • nrow
    • número de linhas
  • ncol
    • número de colunas
  • byrow
    • FALSE = preenchimento pelas colunas, TRUE = preenchimento pelas linhas
  • dimnames
    • nomes das linhas e das colunas da matriz

Exemplo:

> m = matrix(c(1,0,0,0,1,0,0,0,1),nrow = 3, ncol = 3, byrow = TRUE)
> print(m)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

Podem ser atribuídos nomes às colunas:

> colnames(m) <- c("C1", "C2", "C3")
>  print(m)
     C1 C2 C3
[1,]  1  0  0
[2,]  0  1  0
[3,]  0  0  1

e, com isso, as colunas podem ser referenciadas pelos seus nomes:

> m[,"C1"]
[1] 1 0 0
> m[,"C2"]
[1] 0 1 0
> m[,"C3"]
[1] 0 0 1
> m[2,"C2"]
C2 
 1 
> m[,c("C1", "C3")]
     C1 C3
[1,]  1  0
[2,]  0  0
[3,]  0  1

da mesma maneira, as linhas também podem ter nomes atribuídos a elas e serem, a partir daí, referenciadas pelos seus nomes:

> rownames(m) <- c("R1", "R2", "R3")
> print(m)
   C1 C2 C3
R1  1  0  0
R2  0  1  0
R3  0  0  1
> m["R2",]
C1 C2 C3 
 0  1  0 
> m["R2","C2"]
[1] 1

Também podem ser atribuídos nomes às linhas e às colunas em um único comando:

> library(matrixcalc)
> h <- hankel.matrix( 3, seq( 1, 5 ) )
> print(h)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    4
[3,]    3    4    5
> dimnames(h) = list( 
+     c("R1", "R2", "R3"),  # nomes das linhas
+     c("C1", "C2", "C3"))  # nomes das colunas
> print(h)
   C1 C2 C3
R1  1  2  3
R2  2  3  4
R3  3  4  5

Ao se obter a matriz transposta, onde são trocadas as linhas pelas colunas e vice-versa (as linhas viram colunas e as colunas viram linhas), os nomes das linhas viram nomes das colunas e vice-versa, também. Como a matriz h é simétrica, na verdade só são trocados os nomes das linhas e das colunas:

> t(h) # Matriz transposta da matriz h
   R1 R2 R3
C1  1  2  3
C2  2  3  4
C3  3  4  5

A matriz pode ser desconstruída, se tornando um vetor:

> class(h)
[1] "matrix"
> c(h) # Desconstrói a matriz h, tornando-a um vetor
[1] 1 2 3 2 3 4 3 4 5
> class(c(h))
[1] "numeric"
> typeof(c(h))
[1] "double"

A matriz simétrica e sua transposta são idênticas, mas quando são atribuídos nomes diferentes às suas linhas e colunas a matriz simétrica e sua transposta deixam de ser idênticas:

> hm <- hankel.matrix( 3, seq( 1, 5 ) )
> identical(hm, t(hm))
[1] TRUE
> dimnames(hm) = list(
+     c("R1", "R2", "R3"),  # nomes das linhas
+     c("C1", "C2", "C3"))  # nomes das colunas
> identical(hm, t(hm))
[1] FALSE

Nota:

Instalação da biblioteca matrixcalc, que faz cálculos matriciais, como superusuário, para fazer a instalação no diretório /usr/local/lib/R/site-library:

pi@raspberrypi:~/R $ sudo R
> install.packages("matrixcalc")
Installing package into/usr/local/lib/R/site-library(aslibis unspecified)
tentando a URL 'https://cloud.r-project.org/src/contrib/matrixcalc_1.0-3.tar.gz'
Content type 'application/x-gzip' length 28499 bytes (27 KB)
==================================================
downloaded 27 KB
...

Referências:

Leia mais