首页 > 解决方案 > R forEach 为列表列表和结构输出列表分配名称

问题描述

我希望我的 foreach 代码返回一个可读的列表。给定一组要循环的项目,我想要一个结构化列表,其中包含基于循环值的命名列表。

我的代码:

item_a <- c(1,2,3,4,5)
item_b <- c("a", "b", "c")
#loop over a then loop over c
#5*3 passes
list_of_results <- foreach(A = item_a,
                           .combine = "list") %:% 
  foreach(B = item_b) %dopar% {
            #Arbitrary processes here
            aa <- A*A
            bb <- paste0(B, B)
            list(aaa = aa,
                 bbb = bb)
}

输出是没有模式的东西。长度为 2 的列表。列表名称 (aaa, bbb) 保留在结果中。但仍然没有结构。

我想要的输出是长度为 5 的列表:

    [[1]] #Signifies the 1:5 values in item_a
       [[1]]
         [[1]] #Signifies the 1:3 values in item_b
           aaa 1 #Computed values in list(aaa == aa, bbb = bb)
           bbb aa
         [[2]]
           aaa 1
           bbb bb
         [[3]]
           aaa 1
           bbb cc
    [[2]] 
       [[1]]
         [[1]] 
           aaa 4 
           bbb aa
         [[2]]
           aaa 4
           bbb bb
         [[3]]
           aaa 4
           bbb cc
  

... 很快

我真的无法在文档和其他 SO 问题中找到它。我真的需要帮助,非常感谢。是否可以使用assign(env = to global env)?但这违背了 foreach 使用输出而不是副作用的想法

编辑:我的例子有问题。简化为列表(aaa = aa, bbb = bb)

我想要使​​用嵌套 for 循环的伪代码

for(big_index in 1:5) {
  for(small_index in 1:3) {
            aa <- item_a[big_index]*item_a[big_index]
            bb <- paste0(item_b[small_index], item_b[small_index])
            small_list <-list(aaa = aa,bbb = bb) 
            big.list[[big_index]][[small_index]] <- small_list 
}

    

标签: rforeachparallel-foreach

解决方案


推荐阅读