lapply function/loops в списке списков R
Я знаю, что эта тема появилась на SO несколько раз, но примеры часто были более сложными, и я хотел бы получить ответ (или набор возможных решений) этой простой ситуации. Я все еще обнимаю голову вокруг R и программирования в целом. Поэтому здесь я хочу использовать функцию lapply
или простой цикл для списка data
который представляет собой список из трех списков векторов.
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)
Теперь я хочу получить список средств для каждого вектора. Результатом будет список из трех элементов (списков).
Я знаю только, как получить список результатов для списка векторов и
for (i in 1:length(data1)){
means <- lapply(data1,mean)
}
или путем:
lapply(data1,mean)
и я знаю, как получить все средства, используя rapply
:
rapply(data,mean)
Проблема в том, что rapply не поддерживает структуру списка. Помощь и, возможно, некоторые советы/объяснения были бы высоко оценены.
Ответы
Ответ 1
Мы можем перебирать список из списка с вложенным lapply/sapply
lapply(data, sapply, mean)
Это иначе написано как
lapply(data, function(x) sapply(x, mean))
Или, если вам нужен вывод со структурой list
, можно использовать вложенную lapply
lapply(data, lapply, mean)
Или с помощью rapply
, мы можем использовать аргумент, how
получить то, что мы хотим.
rapply(data, mean, how='list')
Если мы используем цикл for
, нам может понадобиться создать объект для хранения результатов.
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]])
}
}