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