【发布时间】:2013-09-28 02:47:43
【问题描述】:
我正在使用R (3.0.1) 中的raster (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 函数设置一个可以覆盖的临时文件?
非常感谢任何帮助。
【问题讨论】:
-
您是否在每个循环结束时尝试过
rm(r)(即在#Stats Code#之后和}之前。 -
我刚刚尝试添加它,不幸的是,
tempdir()中仍在生成多个临时 .grd 文件。 -
所以
tempdir()对于整个 R 会话应该是相同的,所以rm( tempdir() )可以代替。 -
也许你可以用
tempfile()创建一个临时文件名,然后在代码末尾用rm删除它? -
@JPD -- 很高兴有帮助。我会回答,但我一般不喜欢将其作为解决方案,因为它会删除 all 临时文件,而不仅仅是您刚刚创建的文件。听起来这在您的情况下很好,并且很可能在所有其他情况下也是如此,但我仍然不明白 raster 将其所有临时文件写入磁盘的位置和时间,所以我不知道不知道
removeTmpFiles(h=0)可能会导致什么冲突。
标签: r loops raster temporary-files