“checkForRemoteErrors(val) 中的错误:2 个节点产生错误;第一个错误:找不到函数“wincrqa”

问题描述

我目前正在尝试使用以下代码运行并行化的 RQA。

library(sNow)
library(doSNow)
library(crqa)
    my_wincrqa = function(x,y){
      wincrqa(x,y,windowstep = 1000,windowsize = 2000,radius = .2,delay = 4,embed = 2,rescale = 0,normalize = 0,mindiagline = 2,minvertline = 2,tw = 0,whiteline = F,side = "both",method = "crqa",metric = "euclidean",datatype = "continuous")
    }
cl<-makeCluster(11,type="SOCK")
start_time <- Sys.time()
WCRQA_list = clusterMap(cl,my_wincrqa,HR_list,RR_list)
end_time <- Sys.time()
end_time - start_time

不幸的是,我明白了:“

checkForRemoteErrors(val) 中的错误:2 个节点产生错误;第一的 错误:找不到函数“wincrqa”

我知道在设置并行处理时可能存在总和错误,但我无法解决它。我也使用 parallel() 包尝试了类似的事情。

我很高兴得到任何帮助!

最好的, 约翰逊

解决方法

问题是您已经在主执行环境中加载并附加了“crqa”包,但集群节点在单独的、隔离的 R 会话中运行代码——它们看不到相同的加载包或全局变量!

最简单的解决方案是将 wincrqa 的使用替换为完全限定名称,即在您的函数中使用 crqa::wincrqa

或者,可以在执行函数之前在所有集群节点上附加“crqa”包:

clusterEvalQ(cl,library(crqa))
WCRQA_list = clusterMap(cl,my_wincrqa,HR_list,RR_list)