Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:mclappy/pblappy与lappy-用例_R_Parallel Processing_Lapply_Mclapply - Fatal编程技术网

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))