【问题标题】:"Error in checkForRemoteErrors(val) : 2 nodes produced errors; first error: could not find function "wincrqa"“checkForRemoteErrors(val) 中的错误:2 个节点产生错误;第一个错误:找不到函数“wincrqa”
【发布时间】:2021-06-10 09:25:25
【问题描述】:

我目前正在尝试使用以下代码运行并行化 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 包? library(crqa)
  • 是的,我做到了。好像和并行处理部分有关。
  • johnson24,请参阅我在原始问题中的回复。每个节点都需要知道函数的来源。
  • 旁注:我建议使用 parallel 代替“传统”包 snowdoSNOW(附带R 自 2011 年以来)和 doParallel 代替。 parallel 包,自那以后,由同一作者完成了许多改进,而 snow 只是维持生命支持。

标签: r error-handling parallel-processing multiprocessing parallel-foreach


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多