首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >普尔的地图起作用,但弗尔未来的地图不起作用

普尔的地图起作用,但弗尔未来的地图不起作用
EN

Stack Overflow用户
提问于 2018-11-20 18:14:55
回答 1查看 935关注 0票数 2

在下面的代码中,purrr中的map_dfr可以工作,但是来自furrr的future_map_dfr会引发错误。我怎么才能修好它?

代码语言:javascript
复制
    #install.packages("randomForest"); install.packages("tidyverse"); install.packages("iml")
    library(tidyverse); library(iml); library(randomForest) 
    library(furrr)

    plan(multiprocess)

    set.seed(42)

    mtcars1 <- mtcars %>%  mutate(vs = as.factor(vs),
                                  id = row_number())

x <- "vs"
y <- paste0(setdiff(setdiff(names(mtcars1), "vs"), "id"), collapse = "+")

rf = randomForest(as.formula(paste0(x, "~ ", y)), data = mtcars1, ntree = 50)

predictor <- Predictor$new(rf, data = mtcars1, y = mtcars1$vs)

# Results using map_dfr() from purrr
shapelyresults <- map_dfr(1:nrow(mtcars), ~(Shapley$new(predictor, x.interest = mtcars1[.x,]) %>% 
                                              .$results %>% 
                                              as_tibble() %>% 
                                              arrange(desc(phi)) %>% 
                                              slice(1:5) %>% 
                                              select(feature.value, phi) %>%
                                              mutate(id = .x)))

# Attempt to use future_map_dfr() from furrr
f_shapelyresults <- future_map_dfr(1:nrow(mtcars), ~(Shapley$new(predictor, x.interest = mtcars1[.x,]) %>% 
                                              .$results %>% 
                                              as_tibble() %>% 
                                              arrange(desc(phi)) %>% 
                                              slice(1:5) %>% 
                                              select(feature.value, phi) %>%
                                              mutate(id = .x)))
EN

回答 1

Stack Overflow用户

发布于 2020-03-19 23:35:21

furrr根据您的配置使用future,它可以使用映射到不同CPU核心或线程的R子进程,并具有它们自己的环境/作用域。

根据我的经验,通常会出现两种类型的问题:

  1. 包并不总是由子进程直接附加。
  2. 对象并不总是可以被子进程访问。

因此,你可以:

  • purrr lambda函数重写为命名函数,并在函数顶部抛出require()调用,以排除第一种类型的问题。
  • 在您的命名函数中,也传递您的辅助数据作为参数。

试着做这样的事情:

代码语言:javascript
复制
library(furrr)

my_function <-
  function(primary_object, Shapely_object) {

    require(tidyverse); require(iml); require(randomForest) 

    Shapley_object$new(predictor, 
                       x.interest = mtcars1[primary_object, ]) %>%
      .$results %>%
      as_tibble() %>%
      arrange(desc(phi)) %>%
      slice(1:5) %>%
      select(feature.value, phi) %>%
      mutate(id = primary_object))
  }

f_shapelyresults <- 
  future_map_dfr(
   .x = 1:nrow(mtcars), # 1st argument: primary_object, above
   .f = my_function,
   Shapely_object = Shapely # 2nd argument, as seen above
  )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53399103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档