2015-07-22 2 views
11

Я знаю, что эта тема появилась на SO несколько раз, но примеры часто были более сложными, и я хотел бы получить ответ (или набор возможных решений) для этой простой ситуации. Я все еще обнимаю голову вокруг R и программирования в целом. Поэтому здесь я хочу использовать функцию lapply или простой цикл для списка data, который представляет собой список из трех списков векторов.Функция lapply/петли в списке списков R

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 не поддерживает структуру списка. Помощь и, возможно, некоторые советы/объяснения были бы очень признательны.

ответ

28

Мы можем перебрать список список с вложенной 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]]) 
    } 
    } 
+0

Ничего себе, это здорово (и как-то совершенно неинтуитивно для меня, поскольку я сначала узнал традиционные циклы). просто чтобы понять идею, не могли бы вы показать, как это будет выглядеть в традиционном для цикла? что поможет мне получить представление о структуре индексирования в случае, если мне нужно применить некоторые более сложные функции. – MIH

+1

Обновлено сообщение – akrun

+0

огромное спасибо, огромная помощь! – MIH

Смежные вопросы