Como para conciliar dimensões e substituir valores numa matriz em r

Video: Autovalores de uma matriz 3 x 3

Por padrão, R sempre tenta simplificar os objetos para o menor número de dimensões possíveis quando você usa os suportes para extrair valores de uma matriz. Então, se você pedir apenas uma coluna ou linha, R fará que um vetor, largando uma dimensão.

Tal como acontece com vetores, você pode combinar vários números nos índices. Se você quer deixar cair a primeira e terceira linhas da matriz, você pode fazê-lo como este:

gt; first.matrix [-C (1, 3),] [1] 2 5 8 11

Espere um minuto. . . . Há apenas um índice. R não retornar uma matriz aqui - ele retorna um vetor!

Você pode forçar R para manter todas as dimensões, utilizando o argumento extra solta a partir da função de indexação. Para obter a segunda linha retornada como uma matriz, você faça o seguinte:

gt; first.matrix [2,, gota = FALSE] [, 1] [, 2] [, 3] [, 4] [1,] 2 5 8 11

Esta parece ser a magia absoluta, mas não é tão difícil. Você tem três posições agora entre os colchetes, todos separados por vírgulas. A primeira posição é o índice de linha. A segunda posição é o índice de coluna. Mas então o que?

Na verdade, os colchetes funcionam como uma função, e o índice de linha eo índice de coluna são argumentos para os colchetes. Agora você adicionar um argumento extra solta com o valor FALSO. Como você faz com qualquer outra função, você separar os argumentos por vírgulas. Coloque tudo isso junto, e você tem o código mostrado aqui.



Substituindo os valores numa matriz é feito de um modo muito semelhante ao substituir os valores em um vector. Para substituir o valor na segunda fila e a terceira coluna de first.matrix com 4, você usa o código a seguir.

Video: Multiplicando uma matriz por um vetor de coluna

gt; first.matrix [3, 2] lt; - 4GT; first.matrix [, 1] [, 2] [, 3] [, 4] [1,] 1 4 7 10 [2], 2 5 8 11 [3,] 3 4 9 12

Você também pode alterar uma linha inteira ou coluna de valores, não especificando a outra dimensão. Note-se que os valores são reciclados, de modo a alterar a segunda linha para a sequência 1, 3, 1, 3, você pode simplesmente fazer o seguinte:

gt; first.matrix [2,] lt; - c (1,3) gt; first.matrix [, 1] [, 2] [, 3] [, 4] [1,] 1 4 7 10 [2,] 1 3 1 3 [3,] 3 4 9 12

Você também pode substituir um subconjunto de valores dentro da matriz por outra matriz. Você não tem sequer a especificar os valores como uma matriz - um vector vai fazer. Dê uma olhada no resultado do seguinte código:

gt; first.matrix [1: 2, 3: 4] lt; - c (8,4,2,1) gt; first.matrix [, 1] [, 2] [, 3] [, 4] [1,] 1 4 8 2 [2,] 1 3 1 4 [3,] 3 4 9 12

Aqui você alterar os valores nas duas primeiras linhas e as duas últimas colunas para os números 8, 4, 2, e 1.

R lê e escreve matrizes coluna-wise por padrão. Então, se você colocar um vetor em uma matriz ou um subconjunto de uma matriz, ele será colocado na coluna sábio, independentemente do método. Se você quiser fazer isso sábio-linha, primeiro você tem que construir uma matriz com os valores usando o argumento byrow = TRUE. Então você usa essa matriz em vez do vector original para inserir os valores.


Publicações relacionadas