2012-06-20 13 views
5

In PHP Sie sowohl die Namen und Wert eines Feldes in einem for-Schleife mitErhalten Namen der Liste in for-Schleife

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

Gibt es etwas Vergleichbares in R zugreifen können, wenn sie über den Namen Listen Looping?

+0

Können Sie etwas genauer darüber sein, ob Sie eine Liste mit einer 'for' -Schleife oder mit etwas wie' lapply' in R durchlaufen? Vielleicht ein sehr einfaches Beispiel (in R-Code)? – joran

+0

@joran: geklärte Fragen. Ja, For-Looping über Listen. Ich kann in diesem speziellen Fall nicht verwenden. Ich habe eine verwandte Frage hier gefragt: http://stackoverflow.com/questions/11112842/r-how-to-store-multi-layer-data – naught101

+1

Ok; Sie erhalten nur die Vanilla 'for'-Schleifensyntax in R. Normalerweise würden Sie sich auf jedes Stück (name + element) beziehen, indem Sie entweder' names (myList) 'oder' myList' mit Ihrem Schleifenindex 'i' unterteilen. – joran

Antwort

7

einige Dummy-Daten unter Verwendung und ein dummes erfundenes Beispiels

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

können Sie lapply() über die Indizes der Elemente der 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" 

oder for() Schleife über die Liste:

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

Um die Namen einer lis zu erhalten t verwenden Sie einfach names(list).

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

Die meisten der * an Funktionen Werte zurückgeben, die entsprechend benannt werden, wenn die in der Liste genannt wurde, mit zu beginnen.

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