multidplyr :将函数分配给集群
multidplyr : assign functions to cluster
(请参阅下面的工作解决方案)
我想使用 multidplyr 来并行化一个函数:
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()
然后我得到:
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
如何为每个内核分配源函数?
==================
这是完美的脚本:
必须提取要更新的值,并将结果转换为数据帧
calcul.R
f <- function(x){
return(data.frame(x$a+1))
}
必须设置集群并分配源函数
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()
看起来你初始化了一个集群(虽然你没有显示这部分)。您需要将 variables/function 从全局环境导出到每个工作人员。假设您将集群设置为
cl <- create_cluster(3)
set_default_cluster(cl)
你能试试吗
cluster_copy(cl, f)
这将复制并导出 f
给每个工人(我认为...)
额外
您可能 运行 遇到另一个问题,即您的函数接受 x
作为参数,并向其添加 1
f <- function(x){
return(x+1)
}
由于您将数据框传递给 f
,因此您要求的是 data.frame+1
,这是没有意义的。您可能想将函数更改为
f <- function(x){
return(x$a+1)
}
(请参阅下面的工作解决方案)
我想使用 multidplyr 来并行化一个函数:
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()
然后我得到:
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
如何为每个内核分配源函数?
==================
这是完美的脚本:
必须提取要更新的值,并将结果转换为数据帧
calcul.R
f <- function(x){
return(data.frame(x$a+1))
}
必须设置集群并分配源函数
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()
看起来你初始化了一个集群(虽然你没有显示这部分)。您需要将 variables/function 从全局环境导出到每个工作人员。假设您将集群设置为
cl <- create_cluster(3)
set_default_cluster(cl)
你能试试吗
cluster_copy(cl, f)
这将复制并导出 f
给每个工人(我认为...)
额外
您可能 运行 遇到另一个问题,即您的函数接受 x
作为参数,并向其添加 1
f <- function(x){
return(x+1)
}
由于您将数据框传递给 f
,因此您要求的是 data.frame+1
,这是没有意义的。您可能想将函数更改为
f <- function(x){
return(x$a+1)
}