2013-05-15 16 views
29

mam dla pętli:Zmień nazwę zmiennej w pętli przy użyciu R

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

Co chciałbym zrobić, to mieć A1, A2,A3...A10 i mam zmienną i w nazwie zmiennej.

To nie działa w ten sposób, ale prawdopodobnie brakuje mi jakiejś małej rzeczy. Jak mogę użyć i w pętli for, aby przypisać różne nazwy zmiennych?

+0

dla (w 1:10) {A [i] = d + rnorm (3)} powinno działać. – Eric

+1

która nie działa, jeśli zmienna jeszcze nie istnieje –

+2

W takim przypadku musisz użyć 'assign':' for (i in 1:10) {assign (paste ("A", i, sep = " "), (d + rnorm (3)))}' – COOLSerdash

Odpowiedz

7

Można użyć assign, ale używanie assign (lub get) jest często symptomem struktury programistycznej, która nie jest bardzo podobna do R. Zazwyczaj listy lub macierze umożliwiają stosowanie czystszych rozwiązań.

  • z listy:

    A <- lapply (1 : 10, function (x) d + rnorm (3)) 
    
  • z matrycy:

    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) 
} 

Więcej informacji here lub nawet here!

+0

dziękuję, że działa to doskonale, mam pytanie "następnego kroku": co jeśli zastosuję tę metodę w pętli, a następnie chciałbym użyć 'i'tego elementu stworzonego wektora, więc w zasadzie Ai jest A1 w pierwszej iteracji, ale chcę uzyskać dostęp do Ai [i] – ghb

+1

@ghb: wtedy jest definitywnie czas, aby przejść do macierzy ('A [i, i]') lub listy ('A [[i]] [i] ') - znacznie łatwiej niż' get (paste0 ("x", i)) [i] '. Dodatkowo możesz łatwo przypisać nowe wartości dla wersji matrycy i listy, ale dla wersji 'get' /' assign' potrzebujesz zmiennej tymczasowej. – cbeleites

+0

'fortune :: fortune (236)': * Jedynymi osobami, które powinny korzystać z funkcji przypisania są ci, którzy w pełni rozumieją, dlaczego nigdy nie powinieneś używać funkcji przypisywania . - Greg Snow R-help (lipiec 2009) * – Uwe