web-dev-qa-db-fra.com

Comment définir des noms de ligne et de colonne uniques d'une matrice lorsque sa dimension est inconnue?

J'ai une matrice comme:

     [,1][,2][,3][,4]
[1,]  12  32  43  55
[2,]  54  54  7   8
[3,]  2   56  76  88
[4,]  58  99  93  34

Je ne sais pas à l'avance combien de lignes et de colonnes j'aurai dans la matrice. Ainsi, je dois créer dynamiquement des noms de ligne et de colonne.

Je peux nommer des colonnes (lignes) directement comme:

colnames(rmatrix) <- c("a", "b", "c", "d")

Cependant, comment puis-je créer mon vecteur de noms de manière dynamique pour s'adapter aux dimensions de la matrice?

nm <- ("a", "b", "c", "d")
colnames(rmatrix) <- nm 
19
SacHin DhiMan

Vous pouvez utiliser rownames et colnames et définir do.NULL=FALSE afin de créer des noms dynamiquement, comme dans:

set.seed(1)
rmatrix  <-  matrix(sample(0:100, 16), ncol=4)

dimnames(rmatrix) <- list(rownames(rmatrix, do.NULL = FALSE, prefix = "row"),
                          colnames(rmatrix, do.NULL = FALSE, prefix = "col"))

rmatrix
     col1 col2 col3 col4
row1   26   19   58   61
row2   37   86    5   33
row3   56   97   18   66
row4   89   62   15   42

vous pouvez modifier prefix pour nommer les lignes/colonnes comme vous le souhaitez.

23
Jilber Urbina

Pour nommer dynamiquement des colonnes (ou des lignes), vous pouvez essayer

colnames(rmatrix) <- letters[1:ncol(rmatrix)]

letters peut être remplacé par un vecteur de noms de colonnes de votre choix. Vous pouvez faire la même chose pour les lignes.

8
Chinmay Patil

Vous pouvez utiliser provideDimnames. Quelques exemples avec différents degrés de personnalisation:

m <- matrix(1:12, ncol = 3)

provideDimnames(m)
#   A B  C
# A 1 5  9
# B 2 6 10
# C 3 7 11
# D 4 8 12

provideDimnames(m, base = list(letters, LETTERS))
#   A B  C
# a 1 5  9
# b 2 6 10
# c 3 7 11
# d 4 8 12

provideDimnames(m, base = list(paste0("row_", letters), paste0("col_", letters)))
#       col_a col_b col_c
# row_a     1     5     9
# row_b     2     6    10
# row_c     3     7    11
# row_d     4     8    12
3
Henrik