r-为什么有些光栅函数在指定的临时目录中写入临时文件,而有些则不写入

  • 本文关键字:临时文件 函数 r raster temporary-files
  • 更新时间 :
  • 英文 :


我想控制光栅函数生成的临时文件的存储位置。原因是我希望能够删除特定于进程的临时文件,而不删除并行运行的其他进程中使用的临时文件。这是卢克·麦考利在这里提出的。

其思想是,每个进程都具有以下命令:设置特定于进程的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中生成临时文件。

但是,如果我运行calcoverlayaggregate,当临时文件出现在默认临时目录中时,我的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)

最新更新