Как сохранить результаты из цикла for в списке в новый список под именем вектора i?

У меня есть следующий код:

final_results <- list()

myfunc <- function(v1) {
  deparse(substitute(v1))
}

for (i in mylist) {

...calculations...


tmp_results <- as.data.frame(cbind(effcrs,weights))
colnames(tmp_results) <- c('efficiency',names(inputs),
                     names(outputs)) # header
rownames(tmp_results) <- namesDMU[,1]

#Save to list
name_in_list <- myfunc(i)
dea_results[[name_in_list]] <- tmp_results

}

Приведенный выше код перебирает список фреймов данных. Я хотел бы, чтобы каждый результат, полученный из цикла, сохранялся в отдельном списке под тем же именем, что и исходный файл, полученный из mylist или i.

Я попытался использовать файл deparse substitute. когда я применяю его к отдельному элементу в mylist, это выглядит так:

myfunc(standard_DEA$'2010-11-11')
[1] "standard_DEA$\"2010-11-11\""

Я не знаю, в чем проблема. На данный момент он сохраняет все под именем «i» и заменяет все векторы, поэтому конечным результатом является список из 1.

заранее спасибо


person Alex Bădoi    schedule 05.10.2015    source источник
comment
В вашем примере много ненужных строк, а цель, которую вы имеете в виду, не очень ясна. Я предполагаю, что вам следует перебирать индексы, а не элемент списка. Я бы попробовал listnames<-names(mylist) перед циклом. Затем я зацикливаюсь с for (j in 1:length(mylist)), устанавливаю i<-mylist[[j]], а затем окончательное назначение как dea_results[[listnames[j]]] <- tmp_results.   -  person nicola    schedule 05.10.2015
comment
Что такое myList? Это список чисел? Из имен файлов? Из других объектов? Это именованный список, как если бы это были имена, которые вы хотите использовать для нового списка?   -  person David Robinson    schedule 05.10.2015
comment
Я бы не беспокоился об именах в цикле. После цикла names(dea_results) <- names_I_want   -  person Pierre L    schedule 06.10.2015
comment
@PierreLafortune Прочтите последнюю строку ОП: на данный момент все сохраняется под именем i. Так что нет смысла менять имена после цикла, если список изначально построен неправильно.   -  person nicola    schedule 06.10.2015
comment
@nicola, если единственная проблема в том, что имена неверны, чаннинг в конце решит ее. Вы говорите, что он строится неправильно, это отдельная проблема, созданная попыткой пользователя манипулировать им.   -  person Pierre L    schedule 06.10.2015
comment
@PierreLafortune В основном цикл всегда говорит dea_results[["i"]] <- tmp_results, поэтому в конечном итоге он будет иметь длину 1, поскольку новый элемент перезаписывает предыдущий. Так что менять имена в конце бесполезно.   -  person nicola    schedule 06.10.2015
comment
Вопрос не воспроизводим, поэтому мы не можем проверить, что на самом деле происходит. Они могли бы использовать dea_results[[i]] <- tmp_results. Но просто гадать без данных   -  person Pierre L    schedule 06.10.2015
comment
спасибо никола. именно то, что я искал   -  person Alex Bădoi    schedule 06.10.2015


Ответы (1)


Похоже, вам нужен цикл do.

library(dplyr)

function_which_returns_dataframe = function(i) {

   ...calculations...

   tmp_results <- as.data.frame(cbind(effcrs,weights))
   colnames(tmp_results) <- c('efficiency',names(inputs),
                     names(outputs)) # header
   rownames(tmp_results) <- namesDMU[,1]
   tmp_results
}


data_frame(mylist = mylist,
           name = names(mylist)) %>%
  group_by(mylist, name) %>%
  do(function_which_returns_dataframe(.$mylist[[1]]))
person bramtayl    schedule 05.10.2015