我试图在我的机构第一次使用高性能集群,我遇到了一个我无法解决的问题.
以下代码返回错误:
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""
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)
这次没有找到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)
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试调整for循环以并行使用它作为foreach循环.对于for循环,我创建一个空矩阵,然后用for循环生成的值填充它.但是这种方法在foreach循环中不起作用,
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)
}
}
})
Run Code Online (Sandbox Code Playgroud)
我的结果矩阵仍然只是填充了na,它没有填充.
z是一个栅格文件,我是一个数字类的向量.我希望每个类别i的光栅z中的单元格数量,然后将其除以光栅z中的单元格总数以得到这个比例.
关于如何在foreach循环中将其保存为矩阵/数据帧的任何建议?
先感谢您.
跟进上一个问题