2015-01-19 18 views

risposta

24

mi limiterò a messo qui come ci sono mucchio di risposte simpatiche nei commenti

Si potrebbe creare un intero nuova matrice con le dimensioni della vostra vecchia matrice

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

Or , allo stesso modo, per risparmiare alcune sequenze di tasti (perché un matrix è un caso speciale di array bidimensionale)

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

Oppure si potrebbe preservare la struttura del vecchio matrice utilizzando [] e riempirlo con zeri

distances[] <- 0L # @Richard    

Oppure si potrebbe semplicemente moltiplicare tutti i valori per zero

distances*0L # @akrun 

O più generale soluzione sarebbe che avrà nella conta NA casi troppo (perché ogni numero in potere di zero è pari sempre a 1)

distances^0L - 1L # @docendodiscimus 
.210

O alcune delle mie cose: Si potrebbe convertire la matrice a una matrice logica in vari modi e quindi aggiungere zeri, per esempio:

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

O semplicemente

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

Se si potrebbe avere zero o NA valore nella matrice, row(distances) (o col(distances)) non:

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

e si può forzare l'intera matrice di essere NA valori, come un modo per produrre una matrice di 1 's, quindi sottrarre 1:

is.na(distances + NA) - 1L 

O solo per divertimento

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

Altro (un po' scomodo metodo) sarebbe utilizzando dim<-

`dim<-`(rep_len(0L, length(distances)), dim(distances)) 
+1

Se stai andando a raccogliere tutti i tipi di modi, puoi anche fare' distanze^0L - 1L'. Nota che questo convertirà anche gli AN, se presenti, a 0, diversamente dalle distanze * 0L'. –

+1

@docendodiscimus sei libero di contribuire, questa è una risposta wiki. –

1

Si potrebbe semplicemente digitare

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

Questo dovrebbe funzionare come desiderato.

Modifica: Ho fatto un piccolo errore (vedi commento) e l'ho corretto.

+0

Hai ragione. Ho cambiato la mia risposta di conseguenza. – bonnaix

0

Questo è il codice che uso per la matrice non quadrata! esempio è per una matrice 4 X 6

matrix(rep(0,4*6),nrow=4,ncol=6) 
+1

Il 'rep' non è necessario. 'matrix (0, nrow = 4, ncol = 6)' funziona bene. (Proprio come nel commento principale sulla domanda, o la prima riga di codice della risposta accettata.) R ricicla lo 0 come necessario. – Gregor

Problemi correlati