4

我正在使用(3.0.1)raster中的 (2.1-49) 包R来读取许多栅格,计算一些统计数据并存储结果。一些栅格太大而无法存储在内存中,因此作为临时文件写入与 . 指示的文件夹不同的文件夹中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=Traster代码的功能行不起作用。但是,这两个附加选项适用rasterize于同一个包中的函数......

有没有办法为函数设置一个可以覆盖的临时文件raster

非常感谢任何帮助。

4

1 回答 1

0

这个问题与这个问题类似我在这个讨论中找到了一种更好的方法来管理这个问题,它从循环或并行进程中创建一个临时目录,该目录与循环中正在处理的数据的唯一名称相关联(在我的情况下,值) 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)
于 2016-02-06T06:09:50.917 回答