我正在使用ltmle和parallel函数对远程群集上的许多被推定的数据帧列表运行分析。下面是我的代码:
set.seed(500, kind = "L'Ecuyer-CMRG")
numcores <- future::availableCores()
cl <- parallel::makeCluster(numcores)
parallel:clusterEvalQ(cl, library(ltmle))
parallel:clusterEvalQ(cl, Avar <- c("var4", "var5", "var6")
parallel:clusterEvalQ(cl, Lvar <- c("var1", "var2", "var3")
parallel:clusterEvalQ(cl, Yvar <- c("var7", "var8")
parallel:clusterEvalQ(cl, wt <- c("weight")
list.of.imputed.dfs <- parallel:parLapply(cl = cl, list.of.imputed.dfs, function(x) {
Anodes = Avar,
Lnodes = Lvar,
Ynodes = Yvar,
survivaloutcome = T,
observation.weights = wt,
variance.method = "ic",
abar = list(c(1,1,1,1), c(0,0,0,0)))})当observation.weights = wt,被注释掉时,这段代码会运行,但当我保留上面所写的代码时,它会给我一个错误。错误为:
Error in checkForRemoteErrors(val) :
4 nodes produced errors: first error: observation.weights must be NULL or a vector of length nrow(data) with no NAs, no negative values, and at least one positive value我在所有推定的数据帧中检查了权重变量的所有这些特征(它们在所有数据帧中都是相同的,因为在原始数据帧中没有丢失权重)。我没有NAs,所有的值都是正数。我的权重变量的类是向量,在我的list.of.imputed.dfs中,我有与每个数据帧大小一样多的值。此外,权重变量是每个数据帧的第一个变量。
除了错误消息中的信息之外,有没有什么原因导致我上面写代码的方式不起作用?或者,我是否遗漏了错误消息中的关键信息?
发布于 2021-09-03 12:31:23
从要包含在每个估算数据帧中的变量中删除权重变量。
您需要将权重变量导出到集群核心,然后将权重变量作为列表添加到集群核心,如下所示:
clusterExport(cl, list("data"), envir=environment())
clusterEvalQ(cl, wt <- data$weight)不要这样做:
parallel:clusterEvalQ(cl, wt <- c("weight")然后像上面那样运行ltmle。
https://stackoverflow.com/questions/69002628
复制相似问题