Get names of list in for loop

naught101 picture naught101 · Jun 20, 2012 · Viewed 12.4k times · Source

In PHP you can access both the names and values of an array in a for loop with

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

Is there anything comparable in R, when looping over named lists?

Answer

Gavin Simpson picture Gavin Simpson · Jun 20, 2012

Using some dummy data and a silly contrived example

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

You can lapply() over the indices of the elements of 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"

or for() loop over the 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"