【问题标题】:Stop furrr::future_map from printing iteration AFTER finishing完成后停止 furrr::future_map 打印迭代
【发布时间】:2020-06-25 11:44:17
【问题描述】:

我正在使用 future_map 创建几个图,在其中迭代变量列表并将每个变量的 png 文件输出/保存到文件夹。所以没有需要在控制台或“绘图”窗格中显示的输出。

函数的绘图部分:

  ggplot(aes(sample = value,
               color = key)) +
    stat_qq(alpha = 0.8, size = 0.5) +
    theme_light() +
    theme(legend.position = "none")  +
    stat_qq_line() +
    facet_wrap(~key,
               ncol = 4) +
    ggtitle(.var) +
    ggsave(filename = here::here(paste0(.path,
                                        .var,
                                        ".png")),
           units = "cm",
           width = 25,
           height = 10)}

我如何映射函数:

plan(multiprocess(workers = 10))
future_map(names_list,
           ~check_dists(df_lips_imputed, .x, "doc/distributions/testing2/"),
           verbose = FALSE)

但是,在创建完所有文件后,我可以看到它们在文件夹中,这是缓慢打印的(需要一段时间,~1k 次迭代):

[[1]]

[[2]]

[[3]]

...

有谁知道如何抑制这个输出?

非常感谢!

【问题讨论】:

  • 一些想法。一:我认为这是purrr:map 中的行为,与期货/并行化无关。二:map 返回一个与您映射的列表长度相同的列表。三:不确定这是明智的还是规范的,但也许将您的 future_map 嵌套在另一个函数中,您可以静默返回输出。
  • 谢谢迈克尔!我尝试将它嵌套在一个函数中,并在函数本身周围使用 invisible() ,但两者都不起作用。 Walk 有效并抑制输出,但未并行化。我找不到像“future_walk”这样的东西。我发现分配这个列表(名称

标签: r tidyverse purrr furrr


【解决方案1】:

如果你安装了furrr的开发版

devtools::install_github("DavisVaughan/furrr")

然后您可以使用future_walk,就像walkmap 所做的那样。对于walk,函数会产生副作用,因此返回值只是输入。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我不确定这是否会改变最后打印出列表元素所需的时间,但是如果您将 future_map 调用保存为一次性变量,它将把输出保存在该变量中而不是打印出来并堵塞你的控制台或日志文件:

    x <- future_map(names_list,
                    ~check_dists(df_lips_imputed, .x, "doc/distributions/testing2/"),
                    verbose = FALSE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-24
      • 2020-12-19
      • 2020-07-02
      • 2021-03-11
      • 2018-01-30
      • 2012-10-15
      • 1970-01-01
      • 2022-06-17
      相关资源
      最近更新 更多