2012-06-20 7 views
5

w PHP można uzyskać dostęp zarówno nazwy i wartości z tablicy w pętli for zGet nazwy listy w pętli for

foreach ($array as $key => $value) { 

Czy jest coś porównywalne R, gdy zapętlenie nad nazwanych list?

+0

Czy możesz być trochę bardziej konkretny, czy pętli nad listą z pętli 'for' lub coś podobnego' lapply' w R? Może bardzo prosty przykład (w kodzie R)? – joran

+0

@joran: wyjaśnione pytania. Tak, zapętla się po listach. Nie mogę używać lapply w tym konkretnym przypadku. Zadałem pokrewne pytanie tutaj: http://stackoverflow.com/questions/11112842/r-how-to-store-multi-layer-data – naught101

+1

Ok; dostajesz tylko waniliową składnię "for" w języku R. Zazwyczaj odnosisz się do każdego elementu (nazwa + element), podseparowując 'names (myList)' lub 'myList' ze swoim indeksem pętli' i'. – joran

Odpowiedz

7

Korzystanie jakąś atrapę dane i głupie contrived przykład

ll <- list(A = 1:10, B = LETTERS[1:10], C = letters[1:10]) 

Można lapply() ciągu indeksów elementów ll:

out <- lapply(seq_along(ll), 
      function(ind, list, names) { 
       paste(names[ind], "=", paste(list[[ind]], collapse = ", ")) 
      }, list = ll, names = names(ll)) 

R> out 
[[1]] 
[1] "A = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" 

[[2]] 
[1] "B = A, B, C, D, E, F, G, H, I, J" 

[[3]] 
[1] "C = a, b, c, d, e, f, g, h, i, j" 

lub for() pętla na listę:

ll2 <- vector("list", length(ll)) 
nams <- names(ll) 
for(i in seq_along(ll)) { 
    ll2[[i]] <- paste(nams[i], "=", paste(ll[[i]], collapse = ", ")) 
} 
ll2 

R> ll2 
[[1]] 
[1] "A = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" 

[[2]] 
[1] "B = A, B, C, D, E, F, G, H, I, J" 

[[3]] 
[1] "C = a, b, c, d, e, f, g, h, i, j" 
3

Aby uzyskać imiona i nazwiska po prostu używasz names(list).

ll <- list(A = 1:10, B = LETTERS[1:10], C = letters[1:10]) 
names(ll) 
#[1] "A" "B" "C" 

Większość * stosowanych funkcji zwróci wartości, które są odpowiednio nazwane, jeśli nazwa listy została nazwana na początku.

sapply(ll, max) 
# A B C 
#"10" "J" "j"