r-多地点:将函数分配给群集



(请参阅下面的工作解决方案)

我想使用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 

如何为每个核心分配来源的功能?

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

这是完美的脚本:

必须提取值以更新的值,然后将结果转换为dataFrame

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()

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

cl <- create_cluster(3)
set_default_cluster(cl)

您可以尝试

吗?
cluster_copy(cl, f)    

这将把f复制到每个工人(我认为...)

extra

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

f <- function(x){
         return(x+1)
}

由于您将数据框传递给f,因此您要求data.frame+1,这是没有意义的。您可能想将您的功能更改为

之类的东西
f <- function(x){
         return(x$a+1)
}

相关内容

  • 没有找到相关文章

最新更新