【问题标题】:tidy function cannot be used within future_map?tidy 函数不能在 future_map 中使用?
【发布时间】:2021-11-24 08:33:42
【问题描述】:

我在下面有 R 代码。 对于最后一行,当我使用 map() 函数时,它运行良好。 但是,当我更改为 future_map() 函数时,我收到以下错误消息:

“错误:mutate()model 有问题。 我model = future_map(splits, fun1)。 x 没有适用于 'tidy' 的方法应用于“c('lmerMod', 'merMod')”类的对象”

有什么想法吗?谢谢。

fun1 <- function(data) {
    data %>% analysis %>%
       lmer(val ~ period + (1 | id), data = .) %>% tidy
 }
 
 plan(multisession)
 
 raw %>%
    nest(data = -c(analyte, var)) %>%
    mutate(boot = future_map(data, ~ bootstraps(
       data = .x,
       times = 5,
       strata = id
    ),
    .progress = T)) %>%
    unnest(boot) %>%
    mutate(model =future_map(splits, fun1)) 

【问题讨论】:

    标签: dictionary future tidy


    【解决方案1】:

    我的一个脚本遇到了完全相同的问题。为了让future_maptidy 正常工作,我需要明确引用broom 包(即我需要使用broom::tidy 代替tidy)。在您的示例中,您尝试从混合模型中提取汇总统计信息,因此如果我们将 fun1 修改为如下所示,代码应该可以正常运行:

    fun1 <- function(data) {
    data %>% analysis %>%
       lmer(val ~ period + (1 | id), data = .) %>% broom.mixed::tidy
    }
    

    更新(2021 年 12 月 13 日):

    在阅读了更多内容后,我现在了解到,正如原始帖子中所述,问题是由于未在评估未来的 R 环境中附加 broom.mixed 包。而不是修改fun1(这是解决问题的一种非常hacky的方法),我们应该使用future_map.options参数来保证broom.mixed被附加(并且所有相关函数都可用)未来的环境。以下代码应该可以正常运行:

    fun1 <- function(data) {
              data %>%
              analysis %>%
              lmer(val ~ period + (1 | id), data = .) %>%
              tidy
            }
    
    plan(multisession)
    
    raw %>%
      nest(data = -c(analyte, var)) %>%
      mutate(boot = future_map(data, ~ bootstraps(data = .x,
                                                  times = 5,
                                                  strata = id),
                               .progress = T)) %>%
      unnest(boot) %>%
      mutate(model = future_map(splits,
                                fun1,
                                .options = furrr_options(packages = "broom.mixed")))
    

    我的收获是,为了安全起见,始终使用future_map.options 参数列出我们需要使用的包(作为字符向量)可能是一个好习惯。我希望这会有所帮助!

    【讨论】:

    • 感谢您分享您的经验。我在代码中将“tidy”替换为“broom::tidy”,但仍然看到相同的错误消息。我同意你的观点,这可能是来自 furrr 的错误。无论如何,非常感谢。
    • 我刚刚意识到,由于您要从混合模型中提取汇总统计信息,因此您需要使用 broom.mixed 包中的 tidy 函数。如果将tidy 替换为broom.mixed::tidy,您的代码是否按预期工作?
    • 天哪,是的,当我使用“broom.mixed::tidy”时它起作用了。我很高兴能解决这个问题!非常感谢!!!!
    • 没问题——乐于助人。 :) 实际上我已经找到了一种更好的方法来解决这个问题,它不需要修改 fun1 函数。 future_map 有一个选项,允许您指定必须在每个 R 环境中加载哪些包。让我用这些新信息更新我的答案。
    • 同意!再次感谢您的帮助!
    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2019-03-29
    • 2020-12-19
    • 2018-09-14
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多