R:mclappy/pblappy与lappy-用例
我在这个例子中寻求帮助。它可能与R:mclappy/pblappy与lappy-用例,r,parallel-processing,lapply,mclapply,R,Parallel Processing,Lapply,Mclapply,我在这个例子中寻求帮助。它可能与pbapply包无关,而是与mclappy()相关。然而,也许有人知道这里发生了什么 问题 唯一的区别是使用pblappy()/mclappy()而不是lappy()(我在macOS上)。在本例中,pblappy()方法返回NULL,而lappy()尝试工作正常 有趣的是,它的行为与我在本例中使用的lda()类似。使用glm()或其他建模方法的其他示例效果良好 似乎并行应用调用甚至没有从这里开始(根据完成的速度) sperrorest()是一个通用框架(因此不应该
pbapply
包无关,而是与mclappy()
相关。然而,也许有人知道这里发生了什么
问题
唯一的区别是使用pblappy()
/mclappy()
而不是lappy()
(我在macOS上)。在本例中,pblappy()
方法返回NULL
,而lappy()
尝试工作正常
有趣的是,它的行为与我在本例中使用的lda()
类似。使用glm()
或其他建模方法的其他示例效果良好
似乎并行应用调用甚至没有从这里开始(根据完成的速度)
sperrorest()
是一个通用框架(因此不应该是这里的问题),我不明白为什么该示例使用顺序方法(lappy()
)而不是并行方法(pblappy()
)
同样,使用foreach()
而不是使用apply*函数也可以。因此,我假设它与lda()
无关,并且与并行apply*调用相关
笔记:
该示例在两个内核上运行,因此应该在任何机器上运行
首先,请执行devtools::安装\u github(“pat-s/sperrorest@mclapply-vs lappy”)
代码(可复制)
库(MASS)
图书馆(sperrorest)
图书馆(平行)
图书馆(pbapply)
currentSample在带有R3.4.0的Linux上工作。确保在新的R会话中重试,即R--vanilla
。仅供参考,如果您查看pblappy()
的代码,您将看到当您使用cl=2
时,它在内部调用mclappy()
。换句话说,故障排除pblappy()
与故障排除mclappy()
相同。或者,当您使用plan(multiprocess)
时,查看它是否与future包的future\u lappy()
一起工作。Hi@HenrikB谢谢。它确实可以在Linux和macOS上使用R--vanilla
,也可以在Windows上使用,但在普通macOS上则会崩溃。现在我需要思考如何处理这个问题。首先检查您的未来应用程序()
,看看这对macOS是否有帮助。我正在考虑使用pbmclappy()
无论如何,在后台使用future
)
library(MASS)
library(sperrorest)
library(parallel)
library(pbapply)
currentSample <- partition.cv(maipo, nfold = 4)
currentSample[[2]] <- partition.cv(maipo, nfold = 4)[[1]]
currentRes <- currentSample
lda.predfun <- function(object, newdata, fac = NULL) {
library(nnet)
majority <- function(x) {
levels(x)[which.is.max(table(x))]
}
majority.filter <- function(x, fac) {
for (lev in levels(fac)) {
x[ fac == lev ] <- majority(x[ fac == lev ])
}
x
}
pred <- predict(object, newdata = newdata)$class
if (!is.null(fac)) pred <- majority.filter(pred, newdata[,fac])
return(pred)
}
data("maipo", package = "sperrorest")
predictors <- colnames(maipo)[5:ncol(maipo)]
fo <- as.formula(paste("croptype ~", paste(predictors, collapse = "+")))
# pblapply attempt (not working)
runreps_res <- pblapply(cl = 2, currentSample, function(X)
runreps(currentSample = X, data = maipo,
formula = fo, par.mode = 1, pred.fun = lda.predfun,
do.try = FALSE, model.fun = lda,
error.fold = TRUE, error.rep = TRUE, do.gc = 1,
err.train = TRUE, importance = FALSE, currentRes = currentRes,
pred.args = list(fac = "field"), response = "croptype", par.cl = 2,
coords = c("x", "y"), progress = 1, pooled.obs.train = c(),
pooled.obs.test = c(), err.fun = err.default))
# mclapply attempt (not working)
runreps_res <- mclapply(mc.cores = 2, currentSample, function(X)
runreps(currentSample = X, data = maipo,
formula = fo, par.mode = 1, pred.fun = lda.predfun,
do.try = FALSE, model.fun = lda,
error.fold = TRUE, error.rep = TRUE, do.gc = 1,
err.train = TRUE, importance = FALSE, currentRes = currentRes,
pred.args = list(fac = "field"), response = "croptype", par.cl = 2,
coords = c("x", "y"), progress = 1, pooled.obs.train = c(),
pooled.obs.test = c(), err.fun = err.default))
# lapply attempt (working)
runreps_res <- lapply(currentSample, function(X)
runreps(currentSample = X, data = maipo,
formula = fo, par.mode = 1, pred.fun = lda.predfun,
do.try = FALSE, model.fun = lda,
error.fold = TRUE, error.rep = TRUE, do.gc = 1,
err.train = TRUE, importance = FALSE, currentRes = currentRes,
pred.args = list(fac = "field"), response = "croptype", par.cl = 2,
coords = c("x", "y"), progress = 1, pooled.obs.train = c(),
pooled.obs.test = c(), err.fun = err.default))