[想法是每个进程都具有以下命令:设置特定于进程的tmpdir
,然后运行某些栅格函数,将其特定于进程的输出存储在tmpDir()
以外的其他位置,最后删除特定于进程的tmpDir()
。
但是某些栅格操作会将其临时文件存储在“默认”临时目录中(看起来像C:\Users\...\Temp\RtmpaevgEe
)。因此,这些临时文件无法在每个过程结束时删除,最终有可能填满硬盘驱动器。无论是针对单个流程执行,在流程的迭代循环中还是在并行设置中,都会发生这种情况。
我用于设置特定于进程的临时目录的代码是:
# Define which process we are in:
processname <- file.path(<raster_to_input_to_this_process.tif>)
# Create path to process-specific temp directory
process_tmp_dir <- file.path(paste0(processname,"_Tmp"))
# Create process-specific temp directory
dir.create(process_tmp_dir, showWarnings = FALSE)
# set temp directory
rasterOptions(tmpdir=process_tmp_dir)
rasterOptions()
或tmpDir()
实际上返回process_tmp_dir
,而不是它在rasterOptions(tmpdir=process_tmp_dir)
命令之前返回的默认临时目录。
然后,如果我运行mask
操作(栅格,空间方法),则按预期在process_tmp_dir
中生成临时文件。
但是如果我运行calc
,overlay
或aggregate
,则当临时文件出现在默认临时目录中时,我的process_tmp_dir
仍为空。在此之后,rasterOptions()
或tmpDir()
返回process_tmp_dir
。
在每种情况下,我都指定了filename
参数和
canProcessInMemory(processname, verbose = T)
memory stats in GB
mem available: 9.66
60% : 5.8
mem needed : 28.07
max allowed : 4.66 (if available)
[1] FALSE
我想知道为什么mask
时这些功能不能“遵从”新的tmpdir设置。(还要注意,mask
生成的.grd文件要比calc
等生成的.tif文件重得多。)我非常感谢为什么这样的建议,以及如何确保在指定的tmpDir()
中生成任何光栅函数的临时文件。
如果您认为这对于更好地了解正在发生的事情是必要的,那么我可以使数据可用并明确显示确切的栅格操作。
我想控制由栅格函数生成的临时文件的存储位置。原因是我希望能够删除特定于进程的临时文件,而无需删除...