web-dev-qa-db-fra.com

Comment remplir une matrice avec zéro (0)

Je dois remplir les distances matricielles avec 0. Comment faire?

distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)
26
Klausos Klausos

Je vais le mettre ici car il y a beaucoup de bonnes réponses dans les commentaires

Vous pouvez créer une toute nouvelle matrice en utilisant les dimensions de votre ancienne matrice

matrix(0L, nrow = dim(distances)[1], ncol = dim(distances)[2])  # @nrussell

Ou, de la même manière, pour enregistrer quelques frappes (car un matrix est un cas spécial de deux dimensions array)

array(0L, dim(distances)) # @alexis_laz

Ou vous pouvez conserver la structure de votre ancienne matrice en utilisant [] Et la remplir de zéros

distances[] <- 0L # @Richard            

Ou vous pouvez simplement multiplier toutes les valeurs par zéro

distances*0L # @akrun

Ou une solution plus générale serait de prendre également en compte NA cas (car chaque nombre au pouvoir de zéro est toujours égal à 1)

distances^0L - 1L # @docendodiscimus

Ou certains de mes trucs: vous pouvez convertir votre matrice en matrice logique de différentes manières, puis ajouter des zéros, par exemple:

is.na(distances) + 0L # if you don't have `NA` values in your matrix

Ou juste

(!distances) + 0L # if you don"t have zeroes in your matrix

Si vous pouvez avoir une valeur nulle ou NA dans la matrice, row(distances) (ou col(distances)) ne:

is.na(row(distances)) + 0L
(!row(distances)) + 0L

Et on peut forcer la matrice entière à être des valeurs NA, comme un moyen de produire une matrice de 1, Puis soustraire 1:

is.na(distances + NA) - 1L

Ou juste pour le plaisir

(distances == "Klausos Klausos") + 0L # if you don't have your name as one of the values

Une autre méthode (un peu maladroite) utiliserait dim<-

`dim<-`(rep_len(0L, length(distances)), dim(distances))
39
David Arenburg

Vous pouvez simplement entrer

matrix( rep( 0, len=25), nrow = 5)

Cela devrait fonctionner comme souhaité.

Edit: J'ai fait une petite erreur (voir commentaire) et l'ai corrigée.

4
bonnaix