我第一次尝试在我的机构使用高性能集群,遇到了一个无法解决的问题。
以下代码返回了一个错误:
ptime<-system.time({
r <- foreach(z = 1:length(files),.combine=cbind) %dopar% {
raster <- raster(paste(folder,files[1],sep=""))
data<-getValues(raster)
clp <- na.omit(data)
for(i in 1:length(classes)){
results[i,z]<-length(clp[clp==classes[i]])/length(clp)
print(z)
}
}
})
Error in { : task 1 failed - "could not find function "raster""
A也尝试了不同的foreach代码来完成我另一个任务:
r <- foreach (i=1:length(poly)) %dopar% {
clip<-gIntersection(paths,poly[i,])
lgth<-gLength(clip)
vid<-poly@data[i,3]
path.lgth[i,] <- c(vid,lgth)
print(i)
}
这一次找不到 gIntersection 函数。显然,所有的包都已经安装和加载了。读了一些论坛帖子后,似乎与函数执行/操作的环境有关。
有人可以帮忙吗?我不是程序员!
谢谢!
更新:
我已经根据提供的解决方案调整了我的代码:
results<-matrix(nrow=length(classes),ncol=length(files))
dimnames(results)[[1]]<-classes
dimnames(results)[[2]]<-files
ptime<-system.time({
foreach(z = 1:length(files),.packages="raster") %dopar% {
raster <- raster(paste(folder,files[z],sep=""))
data<-getValues(raster)
clp <- na.omit(data)
for(i in 1:length(classes)){
results[i,z]<-length(clp[clp==classes[i]])/length(clp)
print(z)
}
}
})
但是我得到的输出结果(我的结果矩阵)全部都是na。正如您所看到的,我创建了一个名为results的矩阵对象来存储结果(使用for循环工作),但是在阅读foreach的文档后,似乎您需要使用该函数以不同的方式保存结果。
有什么建议可以为.combine参数选择什么?
foreach
函数的.packages
参数,这些包不会在工作进程中被加载。 - Roland