For the time being and for the foreseeable future, Maxent models aren't working with multiple cores. This is due to an issue with the mclapply and rJava functions in R; rJava just straight-up does not work with mclapply, and as far as I can tell there's no way to make it do so. As it stands, ENMTools just sets the number of cores to 1 for any of the tests when "type" is set to "mx". If anyone knows, or discovers, a workaround for this please do let me know!
This comment has been removed by the author.
ReplyDeleteI did the identity.test with multiple cores using maxent type. We create a list with the occurrences for each core, so the replicates will be doing divided. Apparently it works, because the empirical value was the same for all replicates, I just need to calculate the p value again join all these matrices of replicates.
ReplyDeleteHere is the script that I used, if it help you:
list_sp1<-vector("list",11)
for(i in 1:11){
list_sp1[[i]]<-data.sp1
}
library(parallel)
cl1<- makeCluster(11)
clusterExport(cl1,c("list_sp1","data.sp2","variables"))
clusterEvalQ(cl1,library(ENMTools))
###ID test
res<-parLapply(cl1,list_sp1,function(i) identity.test(species.1 = i,species.2 = data.sp2,
env = variables, type = "mx", nreps = 9))
stopCluster(cl1)
###For calculate p value D:
obsD<-res[[1]]$reps.overlap[1,1]
reps_list_D<-vector("list",length(res))
for(i in 1:length(res)){
reps_list_D[[i]]<-res[[i]]$reps.overlap[-1,c(1)]
}
reps_D<-sort(unlist(reps_list_D))
replicate_D<-matrix(reps_D,nrow=length(reps_D),ncol=1,dimnames=list(c(1:length(reps_D)),c("D")),byrow = FALSE)
-1*(sum(replicate_D>=obsD)/(length(replicate_D)+1)-1)
###the same for for I index