为什么某些栅格函数将临时文件写入指定的临时目录,而有些则没有?

问题描述 投票:1回答:1
我想控制由栅格函数生成的临时文件的存储位置。原因是我希望能够删除特定于某个进程的临时文件,而不删除在并行运行的其他进程中使用的那些文件。这是卢克·麦考雷here提出的。

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

但是如果我运行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

我想知道为什么mask时这些功能不能“遵从”新的tmpdir设置。(还要注意,mask生成的.grd文件要比calc等生成的.tif文件重得多。)我非常感谢为什么这样的建议,以及如何确保在指定的tmpDir()中生成任何光栅函数的临时文件。

如果您认为这对于更好地了解正在发生的事情是必要的,那么我可以使数据可用并明确显示确切的栅格操作。

我想控制由栅格函数生成的临时文件的存储位置。原因是我希望能够删除特定于进程的临时文件,而无需删除...

r raster temporary-files
1个回答
0
投票
我无法立即想到可能导致这种情况的原因。因此,这不能直接回答您的问题,但确实建议了另一种方法。
© www.soinside.com 2019 - 2024. All rights reserved.