首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >multidplyr :为集群分配函数

multidplyr :为集群分配函数
EN

Stack Overflow用户
提问于 2017-10-03 21:27:17
回答 1查看 1.6K关注 0票数 3

(见下文工作解决方案)

我想使用multidplyr并行化一个函数:

代码语言:javascript
复制
calculs.R
f <- function(x){
return(x+1)
}

main.R
library(dplyr)
library(multidplyr)
source("calculs.R")
d <- data.frame(a=1:1000,b=sample(1:2,1000),replace=T)

result <- d %>% 
   partition(b) %>% 
     do(f(.)) %>%
     collect()  

然后我得到:

代码语言:javascript
复制
Initialising 3 core cluster.
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  2 nodes produced errors; first error: could not find function "f"
In addition: Warning message:
group_indices_.grouped_df ignores extra arguments 

如何将源函数分配给每个核心?

==================

以下是完美无缺的脚本:

必须提取要更新的值,并将结果转换为数据格式。

代码语言:javascript
复制
calcul.R
f <- function(x){
    return(data.frame(x$a+1))
    }

必须设置群集并分配源函数。

代码语言:javascript
复制
main.R
 library(dplyr)
library(multidplyr)
source("calculs.R")

cl <- create_cluster(3)
set_default_cluster(cl)
cluster_copy(cl, f)

d <- data.frame(a=1:10,b=c(rep(1,5),rep(2,5)))

  result <- d %>%
   partition(b) %>%
     do(f(.)) %>%
     collect()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-04 00:34:45

看起来您初始化了一个集群(尽管您没有显示这个部分)。您需要将变量/函数从全局环境导出到每个工作人员。假设您将集群设为

代码语言:javascript
复制
cl <- create_cluster(3)
set_default_cluster(cl)

你能试试吗

代码语言:javascript
复制
cluster_copy(cl, f)    

这将复制并导出f给每个工人(我认为.)

额外的

您可能会遇到另一个问题,即您的函数接受x作为参数,为此添加了1

代码语言:javascript
复制
f <- function(x){
         return(x+1)
}

因为您要将数据帧传递给f,所以需要data.frame+1,这是没有意义的。您可能希望将您的函数更改为

代码语言:javascript
复制
f <- function(x){
         return(x$a+1)
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46553704

复制
相关文章

相似问题

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