【问题标题】:How to save results from for loop on list into a new list under "i" vector name?如何将列表中 for 循环的结果保存到“i”向量名称下的新列表中?
【发布时间】:2016-01-02 15:11:35
【问题描述】:

我有以下代码:

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

}

上面的代码循环遍历数据框列表。我希望循环产生的每个结果都存储在与从mylisti 获得的原始文件同名的单独列表中

我尝试使用deparse substitute。当我将它应用于mylist 中的单个项目时,它看起来像这样:

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

我不知道问题是什么。目前它将所有内容保存在名称“i”下并替换所有向量,因此最终结果是 1 的列表。

提前谢谢你

【问题讨论】:

  • 您的示例中有很多不必要的行,而您的目标不是很清楚。我猜你应该遍历索引而不是列表的元素。我会在循环之前尝试listnames&lt;-names(mylist)。然后,我会循环使用for (j in 1:length(mylist)),设置i&lt;-mylist[[j]],然后将最终赋值为dea_results[[listnames[j]]] &lt;- tmp_results
  • 什么是myList?它是一个数字列表吗?文件名?其他物体?它是一个命名列表吗,就好像您要用于新列表的名称一样?
  • 我不会担心循环中的名称。循环之后,names(dea_results) &lt;- names_I_want
  • @PierreLafortune 阅读 OP 的最后一行:“目前它将所有内容保存在名称“i”下。因此,如果列表没有正确构建,那么在循环之后更改名称就没有意义了。
  • @nicola 如果唯一的问题是名称不正确,最后 channing 将解决它。您说它没有正确构建,这是用户试图操纵它而产生的一个单独问题。

标签: r list loops for-loop names


【解决方案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]]))

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2015-08-24
    • 2022-07-01
    相关资源
    最近更新 更多