J'ai une matrice symétrique et je veux la convertir en matrice triangulaire supérieure/triangulaire inférieure en R. Existe-t-il un moyen de le faire?
Je ne peux pas faire cela en utilisant upper.tri
et lower.tri
. Leur utilisation me donne une matrice avec des entrées de type TRUE
ou FALSE
.
Pour obtenir la matrice triangulaire supérieure:
mat <- matrix(1:9, 3, 3)
mat[lower.tri(mat)] <- 0
Pour supprimer la diagonale, utilisez:
mat[lower.tri(mat,diag=TRUE)] <- 0
ou mat[!upper.tri(mat)] <- 0
comme suggéré dans les commentaires de Karolis.
Alors que la réponse précédente est parfaite, le manuel est votre ami:
Partie triangulaire inférieure et supérieure d'une matrice
La description
Retourne une matrice de logiques de la même taille qu'une matrice donnée avec les entrées VRAI dans le triangle inférieur ou supérieur.
Usage
lower.tri(x, diag = FALSE) upper.tri(x, diag = FALSE)
Arguments
x
une matrice.
diag
logique. La diagonale devrait-elle être incluse?
Voir également
Exemples
(m2 <- matrix(1:20, 4, 5)) lower.tri(m2) m2[lower.tri(m2)] <- NA m2
Un moyen simple:
lower.triangle(X) #lower triangular
upper.triangle(X) #upper triangular
Ou:
library(Matrix)
tril(X) #lower triangular
triu(X) #upper triangular