2013-05-15 13 views
29

Ho un ciclo for:Cambiare nome di variabile nel ciclo for usando R

for (i in 1:10){ Ai=d+rnorm(3)} 

Quello che vorrei fare è di avere A1, A2,A3...A10 e ho la variabile i nel nome della variabile.

Non funziona in questo modo, ma probabilmente mi manca una piccola cosa. Come posso utilizzare lo i nel ciclo for per assegnare nomi di variabili diversi?

+0

per (i in 1:10) {A [i] = d + rnorm (3)} dovrebbe funzionare. – Eric

+1

che non funziona se la variabile non esiste ancora –

+2

In questo caso, devi usare 'assign':' for (i in 1:10) {assign (incolla ("A", i, sep = " "), (d + rnorm (3)))} – COOLSerdash

risposta

7

È possibile utilizzare assign, ma l'utilizzo di assign (o get) è spesso un sintomo di una struttura di programmazione che non è molto simile a R. In genere, elenchi o matrici consentono soluzioni più pulite.

  • con una lista:

    A <- lapply (1 : 10, function (x) d + rnorm (3)) 
    
  • con una matrice:

    A <- matrix (rep (d, each = 10) + rnorm (30), nrow = 10) 
    
46
d <- 5 
for(i in 1:10) { 
nam <- paste("A", i, sep = "") 
assign(nam, rnorm(3)+d) 
} 

Maggiori informazioni here o addirittura here!

+0

grazie a questo funziona perfettamente, ho una domanda 'next step': cosa succede se uso questo metodo in un ciclo e poi mi piacerebbe usare l'elemento i'th del vettore creato in modo sostanzialmente Ai è A1 nella prima iterazione ma voglio accedere ad Ai [i] – ghb

+1

@ghb: quindi è definitivamente il momento di andare per una matrice ('A [i, i]') o una lista ('A [[i]] [i] ') - molto più facile di' get (paste0 ("x", i)) [i] '. Inoltre puoi facilmente assegnare nuovi valori per la matrice e le versioni di lista, ma per la versione 'get' /' assign' avresti bisogno di una variabile temporanea. – cbeleites

+0

'fortunes :: fortune (236)': * Le uniche persone che dovrebbero usare la funzione di assegnazione sono quelle che capiscono completamente perché non si dovrebbe mai usare la funzione assegnata . - Greg Snow R-help (luglio 2009) * – Uwe