为R中的栅格设置可覆盖的临时文件

时间:2013-09-23 08:57:20

标签: r loops raster temporary-files

我在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功能的临时文件?

任何帮助非常感谢。

1 个答案:

答案 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)