【发布时间】:2021-02-07 08:26:53
【问题描述】:
我正在通过未标记的预测函数处理大型数据堆栈 (pm)。处理后,我使用 paroutPred、SE、Lower 和 Upper 作为模板来粘贴 Predicted、SE、lower 和 upper 数据并堆叠这些栅格以进行绘图。
我当前的代码如下。 foreach 循环似乎运行良好,我得到了必要的变量。毕竟,compareRaster(rs, pm) 结果为 TRUE。只有值不同。
在执行 plot(rs) 之后,四个光栅绘制出来了,但是它们都被抬高了,如下所示:What is drawn should be occupancy probability for a species across a map of Wyoming。
我还没弄清楚出了什么问题。我在 for 循环中按顺序运行它(处理时间为 3 天),以确认光栅输出错误。
有人对我的问题有任何见解吗?非常感谢所有帮助。
paroutPred<- pm[[1]]
paroutSE<- pm[[1]]
paroutLower<- pm[[1]]
paroutUpper<- pm[[1]]
paroutPred[]<- NA
paroutSE[]<- NA
paroutLower[]<- NA
paroutUpper[]<- NA
library(doSNOW)
nc<- detectCores()-1
cl<- makeCluster(nc);cl
registerDoSNOW(cl)
comb<- function(...){
mapply('rbind', ..., SIMPLIFY = F)
}
predictions<-
foreach(i = 1:nrow(pm), .combine = 'comb', .multicombine = T,
.maxcombine = 200, .packages = c("unmarked", "raster"), .verbose = T
)%dopar%{
test<- cellFromRow(pm, row=i)
# make into a data.frame for prediction
tmp<- data.frame(pm[test])
# test which are na
na<- sapply(1:nrow(tmp), FUN = function(x){any(is.na(tmp[x, ]))})
# deal with writing the data back to raster
if(length(which(na)) != nrow(tmp)){
# Predict the new data
pred<- predict(fmBest, "state", tmp)
}
list(test, na, pred)
}
stopCluster(cl)
predlist<- list(predictions[[3]][["Predicted"]], predictions[[3]][["SE"]], predictions[[3]][["upper"]], predictions[[3]][["lower"]])
pred<- do.call(cbind, lapply(predlist, data.frame))
names(pred)<- c("Predicted", "SE", "upper", "lower")
test<- predictions[[1]]
na<- data.frame(predictions[[2]])
paroutPred[test[!na]]<- pred$Predicted
names(paroutPred)<- "Predicted"
# Save prediction
paroutSE[test[!na]]<- pred$SE
names(paroutSE)<- "SE"
# Save prediction
paroutLower[test[!na]]<- pred$lower
names(paroutLower)<- "lower"
# Save prediction
paroutUpper[test[!na]]<- pred$upper
names(paroutUpper)<- "upper"
writeRaster(paroutPred, "Ppred_PEFA.tif", format = "GTiff", overwrite = TRUE)
writeRaster(paroutSE, "Pse_PEFA.tif", format = "GTiff", overwrite = TRUE)
writeRaster(paroutLower, "Plower_PEFA.tif", format = "GTiff", overwrite = TRUE)
writeRaster(paroutUpper, "Pupper_PEFA.tif", format = "GTiff", overwrite = TRUE)
Ppred.PEFA <- raster(paste(getwd(), "/Ppred_PEFA.tif", sep=""))
Pse.PEFA <- raster(paste(getwd(), "/Pse_PEFA.tif", sep=""))
Plower.PEFA <- raster(paste(getwd(), "/Plower_PEFA.tif", sep=""))
Pupper.PEFA <- raster(paste(getwd(), "/Pupper_PEFA.tif", sep=""))
rs<- stack(c("Ppred_PEFA.tif", "Pse_PEFA.tif", "Plower_PEFA.tif", "Pupper_PEFA.tif"))
plot(rs)
【问题讨论】:
标签: r r-raster parallel.foreach