3

this is my first question here so i hope i'm doing it right.

I'm trying to run a variant of RandomForest called Geographical Regression Forest (package SpatialML). So to train the models i'm doing a foreach loop in parallel and using a sample with replacement on the calibration data.

library(SpatialML)
library(doParallel)
rm(list=ls())

ds <- SpatialML::random.test.data()
ds
# Parallel settings
ncores <- detectCores() - 1
cl <- makePSOCKcluster(ncores)


y <- names(ds)[1]
x <- paste(names(ds)[c(2,3)], collapse = "+")

f <- as.formula(paste0(y,"~",x));f

clusterEvalQ(cl , expr = c(library(SpatialML)))
clusterExport(cl, list("ds"))
#### Bootstraps #### 
registerDoParallel(cl)
time <- system.time(foreach (i = 1:10) %dopar% {
  # sample with replacement
  trainingREP <- sample.int(nrow(ds), 1*nrow(ds), replace = T)
  # Geographical Regression Forest
  grf.boot <- grf(formula = f, dframe = ds[trainingREP, ],
                  bw = round(nrow(ds)/10, digits = 0), kernel = "adaptive",
                  coords = ds[trainingREP, c(4,5)], ntree = 500, importance = T)
  # Save GRF
  modelFile <- paste("./bootModGRF_",i,".rds",sep="")
  saveRDS( object = grf.boot, file = modelFile)
  
})stopCluster(cl)

but when i run this code i get

Error in { : task 1 failed - "object 'trainingREP' not found

why cant the foreach loop read an object that is created within the same loop?

diego.idm
  • 31
  • 2

0 Answers0