我想控制光栅函数生成的临时文件的存储位置。原因是我希望能够删除特定于进程的临时文件,而不删除并行运行的其他进程中使用的临时文件。这是卢克·麦考利在这里提出的。
其思想是,每个进程都具有以下命令:设置特定于进程的tmpdir
,然后运行一些光栅函数,将其特定于进程输出存储在tmpDir()
以外的其他位置,最后删除特定于进程tmpDir()
。
但是一些光栅操作将其临时文件存储在"默认"临时目录中(看起来像C:Users...TempRtmpaevgEe
(。因此,这些临时文件不能在每个过程结束时被删除,并最终冒着填满硬盘的风险。无论是对单个进程执行,还是在进程的迭代循环中或在并行设置中执行,都会发生这种情况。
我设置进程特定临时目录的代码是:
# 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
操作(Raster,Spatial方法(,则会按预期在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
我想知道为什么这些函数不"符合"新的tmpdir设置,而mask
符合。(另外,请注意,mask
生成的.grd临时文件比calc
等生成的.tif文件重得多。(如果有任何建议,我将不胜感激,以及如何确保在指定的tmpDir()
中生成任何光栅函数的临时文件。
如果您认为这对更好地了解正在发生的事情是必要的,我可以提供数据并明确确切的光栅操作。
我无法立即想到是什么原因导致了这种情况。因此,这并不能直接回答你的问题,但它确实提出了一条替代路径。
我会在每个步骤中使用filename
参数,并使用进程id分配唯一的文件名;或者我会存储临时文件名(如果文件很小,可能是"(,然后在处理完这些文件后删除它们。如果您使用的函数(如+
(没有文件名参数,则需要存储文件名。
您也可以在适当的时间滞后下运行removeTmpFiles
,例如脚本末尾的removeTmpFiles(h=0.5)
。