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