检查远程错误时出错(VAL):5个节点生成错误:找不到对象 [英] Error in check for remote errors (val): 5 nodes produced an error: object not found

查看:31
本文介绍了检查远程错误时出错(VAL):5个节点生成错误:找不到对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试进行10次交叉验证,并通过使用并行处理(ParLApply)来评估联合模型的模型性能。我正在尝试找出我收到错误消息的原因: "检查ForRemoteErrors(Val)时出错:五个节点产生错误:找不到对象‘Week’"

代码如下:

# Validation using 10-fold CV
    library("parallel")
    set.seed(123)
    V <- 10
    n <- nrow(dfC)
    splits <- split(seq_len(n), sample(rep(seq_len(V), length.out = n)))
    CrossValJM <- function (i) {
        library("JM")
        library("nlme")
        trainingData <- dfL[!dfL$ID %in% i, ]
        trainingData_ID <- trainingData[!duplicated(trainingData$ID), ]
        testingData <- dfL[dfL$ID %in% i, ]

        lmeFit <- lme(DA ~ ns(Week, 2), data = trainingData,
                           random = ~ ns(Week, 2) | ID)
        coxFit <- coxph(Surv(TT_event, Event) ~ Gender * Age, data = 
                           trainingData_ID, 
                             x = TRUE)

        jointFit <- jointModel(lmeFit, coxFit, timeVar = "Week")

        pe <- prederrJM(jointFit, newdata = testingData, Tstart = 10, 
                                                  Thoriz = 20)
        auc <- aucJM(jointFit, newdata = testingData, Tstart = 10, 
                                                  Thoriz = 20)
        list(pe = pe, auc = auc)
    }

    cl <- makeCluster(5)
    res <- parLapply(cl, splits, CrossValJM)
    stopCluster(cl)
函数本身被接受,但在运行集群命令时,我遇到此错误,指出它无法识别函数中给定的对象。它们是否应该在函数本身中定义?或者我没有正确使用parLApply函数?

P.S.:数据如下(DFL是一个长度为~1000、DFC~200的数据帧):

dfL <- data.frame(ID = c(1, 1, 1, 2, 2, 3), DA = c(0.4, 1.8, 1.2, 3.2, 3.6, 2.8), Week = c(0, 4, 16, 4, 20, 8), Event = c(1, 1, 1, 0, 0, 1), TT_Event = c(16, 20, 8), Gender = c(0, 0, 0, 1, 1, 0), Age = c(24, 24, 24, 56, 56, 76))

dfC <- data.frame(ID = c(1, 2, 3, 4, 5, 6), DA = c(1.2, 3.6, 2.8, 2.4, 1.9, 3.4), Week = c(16, 20, 8, 36, 24, 32), Event = c(1, 0, 1, 1, 1, 0), TT_Event = c(16, 20, 8, 36, 24, 32), Gender = c(0, 1, 0, 0, 1, 1), Age = c(24, 56, 76, 38, 44, 50))

thnx:)

推荐答案

堆栈溢出相关问题已得到解答。 基本上,您有三种解决方案:

  • 使用clusterExport()将需要的变量导出到集群(最常用的方法)
  • 将所有变量作为函数的参数CrossValJM()传递,以便自动将它们导出到集群(我更喜欢的解决方案,也是编程上最正确的解决方案)
  • 使用R包{Future},它应该自动检测要导出的变量(懒惰的解决方案,但似乎也很好用)

参见示例this

这篇关于检查远程错误时出错(VAL):5个节点生成错误:找不到对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆