【问题标题】:improve readability of output list of foreach loop提高 foreach 循环输出列表的可读性
【发布时间】:2022-01-09 09:23:50
【问题描述】:

我在下面有一个 foreach 嵌套循环的简单示例。如何提高结果res的可读性?

下面是嵌套 for 循环的另一个示例,它具有更易读的结果,列表的每个元素都可以很容易地识别,例如res_desired[["B"]][[3]]

library(foreach)
library(doFuture)

registerDoFuture()
plan(multicore, workers = 1)

# foreach loop
res <- foreach(a = c("A", "B", "C", "D")) %:%
  foreach(b = 1:4) %do%
  {
    paste0(rep(a, b))
  }


# for loop
res_desired <- list()
for(a in c("A", "B", "C", "D")) 
{
  for(b in 1:4)
    {
      res_desired[[a]][[b]] <- paste0(rep(a, b))
    }
  
}



【问题讨论】:

  • 这是关于命名,即names(res) &lt;- LETTERS[1:4],然后您可以提取为res_desired,即res[["B"]][[3]]# [1] "B" "B" "B"
  • 有时,我有五层嵌套循环。 For 循环将在最分散的级别为每个元素添加名称。如何在 foreach 循环中为列表的每个元素添加名称
  • 也许你需要foreach(a = c("A", "B", "C", "D"), .final = function(x) setNames(x, c("A", "B", "C", "D"))) %:% foreach(c = c("a", "b", "c"), .final = function(x) setNames(x, c("a", "b", "c"))) %:%foreach(b = 1:4) %do% {paste0(rep(a, b))}(多加一个内循环)

标签: r foreach rparallel


【解决方案1】:

.final 可能有用。根据?foreach

.final - 调用以返回最终结果的一个参数的函数。

多了一个嵌套循环

res_1 <- foreach(a = c("A", "B", "C", "D"), 
     .final = function(x) setNames(x, c("A", "B", "C", "D"))) %:% 
     foreach(c = c("a", "b", "c"),
        .final = function(x) setNames(x, c("a", "b", "c"))) %:%
      foreach(b = 1:4) %do% {paste0(rep(a, b))}

-检查

> res_1[["B"]][["c"]][[2]]
[1] "B" "B"

类似

res_desired_1 <- list()
for(a in c("A", "B", "C", "D")) {
  for(c in c("a", "b", "c")) {
  for(b in 1:4) {
      res_desired_1[[a]][[c]][[b]] <- paste0(rep(a, b))
    }
  }
}
> res_desired_1[["B"]][["c"]][[2]]
[1] "B" "B"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2013-06-04
    • 2017-05-18
    • 2019-11-24
    • 2016-03-07
    相关资源
    最近更新 更多