我在raster
(3.0.1)中使用R
(2.1-49)包来读取许多栅格,计算一些统计数据并存储结果。某些栅格太大而无法存储在内存中,因此会将其写为与tempdir()
指示的文件夹不同的临时文件。问题是,实际上我有超过5000个栅格,临时文件在脚本完成运行之前填满了我的硬盘。我想在循环的每次迭代中覆盖相同的临时文件。我的代码看起来像这样:
require(raster)
names<- seq(1:5000)
for (i in 1:5000)
{
r <- raster(paste("rast_",names[i],".tif"),sep="")
#Stats Code#
}
将filename="C:/temp",overwrite=T
添加到raster
功能代码行不起作用。但是,这两个附加选项适用于同一个包中的rasterize
函数...
有没有办法设置一个可以覆盖raster
功能的临时文件?
任何帮助非常感谢。
答案 0 :(得分:0)
此问题与this one类似。我在this discussion上找到了一个更好的方法来管理这个问题,它在循环或并行进程中创建一个临时目录,该目录与循环中正在处理的数据中的唯一名称相关联(在我的例子中) ,single@data$OWNER
)的值。
我正在使用并行循环,正如@Josh O'Brien在上面指出的那样,我不想从公共临时目录中删除所有文件,因为它可以删除其他进程的临时文件。这是我使用的代码:
#creates unique filepath for temp directory
dir.create (file.path("c:/",single@data$OWNER), showWarnings = FALSE)
#sets temp directory
rasterOptions(tmpdir=file.path("c:/",single@data$OWNER))
然后在此处插入处理代码,然后在循环结束时删除整个文件夹:
#removes entire temp directory without affecting other running processes
unlink(file.path("c:/",single@data$OWNER), recursive = TRUE)