2012-02-14 14 views
21
expand.grid(i=rexp(5,rate=0.1)) 

Crea solo una colonna ma c'è un modo per moltiplicarlo facilmente a 5 colonne? Intendo il matlab-way-of-doing-cose come rand('exp', 0.1, 10,20) (creando una matrice con numeri random distribuiti in modo esponenziale con media 0.1 di dimensione 10x20), come?Come riempire la matrice con numeri casuali in R?

+2

... perché downvotes su questo? Mi piacciono le semplici domande stupide, si può imparare molto sorprendentemente da loro in modo idiomatico - guarda quanti usano stili leggermente diversi, interessanti. – hhh

+1

Non ho fatto down, ma il testo del mouse include la frase "non mostra alcuno sforzo di ricerca". Quindi immagino che qualcuno possa aver pensato che anche la ricerca più elementare avrebbe dato la risposta a questa domanda. (E IMHO, non c'è differenza significativa nelle risposte attuali. Stavo pensando di cancellare il mio per ridurre il disordine.) – joran

+2

Sono d'accordo: difficile vedere come qualcuno ha trovato 'expand.grid' prima di trovare' matrice 'e, per esempio, ' rnorm'. Forse l'OP avrebbe potuto aiutare dicendo qualcosa come "Non riesco a trovare la documentazione sulla creazione di una matrice" per mostrare dove si trova il vero problema. –

risposta

28

Utilizzare la funzione matrix:

matrix(rexp(200, rate=.1), ncol=20) 

ETA: Se si desidera farlo senza ripetere il 200, è possibile definire una funzione per farlo:

fill.matrix = function(expr, nrow=1, ncol=1) { 
    matrix(eval(expr, envir=list(x=nrow*ncol)), nrow=nrow, ncol=ncol) 
} 

fill.matrix(rexp(x, rate=.1), nrow=10, ncol=20) 

Il x diventa così il manichino variabile di cui stai parlando. E 'quello che stai cercando?

+0

Qualche idea se ci sia qualche bandiera di riempimento per 200? Intendo creare la matrice come questa 'matrix (rexp (___, rate = 10), ncol = 20, nrow = 10)'? Durante la prototipazione rapida, tendo a dimenticare solo le 200 cose --- facendo errori di clutter/newbie-style. – hhh

+0

Vedere la mia modifica- Penso che sia esattamente quello che vuoi. –

+0

È vicino 1 per sempre Try! Mi dispiace di essere un perfezionista, ma sto pensando in un altro modo. Ci deve essere in qualche modo ancora per mantenere la struttura ... – hhh

10

si può fare qualcosa di simile:

matrix(rexp(200), 10) 

E di utilizzo naturalmente ciò che mai di distribuzione che si desidera.

+1

..yy questo è utile, l'ho usato una volta ma l'ho dimenticato subito - per qualche ragione, trovo più facile ricordare il metodo M -style perché è molto più esplicito - questo contiene una tonnellata di cosa implicitamente (e devi assicurarti che i conti corrispondano). – hhh

8

?matrix ti dirà un sacco! e rexp è la funzione per generare una distribuzione esponenziale casuale.

mat <- matrix(data = rexp(200, rate = 10), nrow = 10, ncol = 20) 
+0

... c'è qualcosa che non ho mai capito qui, il termine "tasso" - perché non è 0.1 come medio? Ok, '- con rate 'rate' (cioè, significa '1/rate').', Questa è una parte del manuale mai capita: significa $ \ mu = \ frac {1} {rate} $ ? Sì, dice molto ma in un modo oscuro. Ora torniamo a questa risposta - c'è un modo per implicitamente far girare il 200? È ovvio nell'intenzione del modo di fare M-style. Intendo in questo modo 'Matrix (mean = 0.1, dims = c (20,30), type = c ('random', 'exp'))'? – hhh

+1

Per quanto riguarda il parametro della distribuzione, credo che sia solo la nomenclatura. R deve sceglierne uno! Un sacco di distribuzioni hanno più di una nomenclatura ai suoi parametri. –

0

Ecco una soluzione semplice:

replicate(rexp(10),20) 
0

Utilizzare questa:

matris=matrix(rnorm(10),5,20) 
+1

Benvenuti in Stack Overflow! Sebbene tu possa aver risolto il problema di questo utente, le risposte solo in codice non sono molto utili per gli utenti che verranno a questa domanda in futuro. Modifica la tua risposta per spiegare perché il tuo codice risolve il problema originale. –