我一直在使用moveud
(https://github.com/bacollier/moveud)一段时间,并且可能找到了为什么代码在某些时候运行缓慢的原因。
偶然我删除了文件夹"把它放回去#34;重命名后,代码再次加速。如果代码至少运行一天并随机产生错误(由于文件写入错误???),它现在运行不到一个小时!
所以我的问题是:
无论如何在代码中包含一个计数器,该计数器将产生一个新的子文件夹,例如: _1,_2等文件夹中的每个10000文件?
这是我的代码:
UD_subs5_ving13_split是move
包中的产品,包含大约27000行,文件产品大约是该数字的4倍。
在我的情况下,我想要5个文件夹UDsubs5ving13_1到UDsubs5ving13_5。
是否可以将以下代码中的内容合并到下面代码的path=
部分,例如使用paste
?
应该使用类似length(list.files("/path_to_files")
的内容吗?
mclapply(UD_subs5_ving13_split, function(x){
for(j in 4:nrow(x@DBMvar)){
tryCatch({
move.forud(x,
range.subset=j:nrow(x@DBMvar),
ts=1,
ras=20,lev=c(0.2,.5,.95),
le=20,
crs='+proj=longlat +zone=32 +datum=WGS84',
name=paste(names(x), "", sep = "_"),
ID=names(x),
**path="UDsubs5ving13"**)
}, warning = function(w) {
warning = paste(x@DBMvar@idData$trackId, "", sep = "_")
}, error=function(e) {
j = j + 2
})
}
}, mc.cores = 6)
答案 0 :(得分:1)
我在这个答案中使用的逻辑是学习你有多少个子集。计算大约需要多少文件夹才能将1000个文件填入每个文件夹中。对于每个子集,预先计算此文件夹并将其粘贴在一起以便及时写入。此解决方案假定writeOGR
正在创建文件夹。
move.forud=function(x, range.subset, ts, ras, le, lev, crs, path, name, ID) {
object<-x@DBMvar
if(length(range.subset)<2)
stop("\nrange.subset must have length >1\n")
if(length(le)==1) location.error=rep(c(le), nrow(object))
if(length(le)>1) location.error=c(le)
# calculate number of subfolders needed to house 1000 files each
num.subfolders <- ceiling(length(range.subset)/1000)
# create in advance to which subfolder shapefiles will be written to
subfolder <- sprintf("/_%d", rep(1:num.subfolders, each = 1000))
for(i in range.subset) {
object@interest<-rep(F, nrow(object)); object@interest[i]<-T;times=object@timestamps[i];var=object@means[i];
x.out <- brownian.bridge.dyn(object,raster=ras, time.step=ts, location.error=location.error)
xx=raster2contour(x.out, level=lev)
xx=spTransform(xx, CRS=CRS('+proj=longlat +datum=WGS84'))
xx=SpatialLines2PolySet(xx)
xx=PolySet2SpatialPolygons(xx)
xx=as(xx, "SpatialPolygonsDataFrame")
xx$levels=lev
xx$times=times
xx$stepvar=var
xx$ID=ID
writeOGR(xx, dsn=paste(path, subfolder[i], sep = ""), layer=paste(name, i, sep=""), driver="ESRI Shapefile")
}
}