funkcja lapply / pętle na liście list R

Wiem, że ten temat pojawił się na SO kilka razy, ale przykłady były często bardziej skomplikowane i chciałbym mieć odpowiedź (lub zestaw możliwych rozwiązań) na tę prostą sytuację. Wciąż owijam głowę wokół R i programowania w ogóle. Więc tutaj chcę użyć funkcji lapply lub prostej pętli do data listy, która jest listą trzech list wektorów.

data1 <- list(rnorm(100),rnorm(100),rnorm(100))
data2 <- list(rnorm(100),rnorm(100),rnorm(100))
data3 <- list(rnorm(100),rnorm(100),rnorm(100))

data <- list(data1,data2,data3)

Teraz chcę uzyskać listę środków dla każdego wektora. Rezultatem byłaby lista trzech elementów (listy).

Wiem tylko jak uzyskać listę wyników dla listy wektorów i

for (i in 1:length(data1)){
        means <- lapply(data1,mean)
}

Lub przez:

lapply(data1,mean)

I wiem jak zdobyć wszystkie środki za pomocą rapply:

rapply(data,mean)

Problem polega na tym, że rapply nie utrzymuje struktury listy. Pomoc i ewentualnie kilka wskazówek/wyjaśnień byłoby bardzo mile widziane.

Author: MIH, 2015-07-22

1 answers

Możemy zapętlić listę list z zagnieżdżonym lapply/sapply

 lapply(data, sapply, mean)

Jest inaczej zapisywany jako

 lapply(data, function(x) sapply(x, mean))

Lub jeśli potrzebujesz wyjścia ze strukturą list, można użyć zagnieżdżonego lapply

 lapply(data, lapply, mean)

Lub z rapply, możemy użyć argumentu how, aby uzyskać jakiego rodzaju wyjście chcemy.

  rapply(data, mean, how='list')

Jeśli używamy pętli for, może być konieczne utworzenie obiektu do przechowywania wyników.

  res <- vector('list', length(data))
  for(i in seq_along(data)){
    for(j in seq_along(data[[i]])){
      res[[i]][[j]] <- mean(data[[i]][[j]])
    }
   }
 36
Author: akrun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 11:11:48