R 数小时内无法处理繁重的任务

标签 r loops memory freeze

我有一个 [~90 个文件] 的压缩文件列表。我编写了一个循环来解压缩它们(每个文件大约为 1Gb),进行一些计算,保存每个文件的输出并删除解压缩的文件。此过程的一次迭代每个文件大约需要 30-60 分钟 [并非所有文件的大小完全相同]。

我不太担心时间,因为我可以让它在周末工作。但是,R 并没有完全通过。我在星期五晚上离开了它,它只运行了 12 个小时,所以它只处理了 90 个文件中的 30 个。

我不经常处理这种类型的繁重流程,但过去类似的流程也发生过同样的情况。是否需要在循环中插入任何命令以避免计算机因这个密集的进程而卡住?我在循环结束时尝试了 gc() 无济于事。

是否有针对此类程序的“良好做法”建议列表?

最佳答案

如果您的 session 卡住,您可能会遇到需要隔离的问题,因为它可能是单个文件,或者您可能受到内存限制或广泛使用交换。

无论如何,这里有一些您可以实现的提示或想法:

  • 编写代码以将文件作为单数情况进行处理,例如像这样的功能 process_gz_folder()。然后遍历文件路径并每次调用你创建的函数,这样可以保持全局环境干净。
  • 正如您已经尝试过的那样,有时 gc() 会有所帮助,但这取决于具体情况以及是否正在清除内存(例如在运行 rm() 之后) .可以在第一点调用函数后使用。
  • 您是否将每个文件夹的结果保存在内存中?这组结果会随着每次迭代而变大吗?如果是这样,这可能会占用所需的内存 - 将结果以合适的格式存储到磁盘中,这样您就可以在处理完每个结果后累积结果。
  • 补充一点,如果文件产生输出,请确保它们的名称合适,甚至添加时间戳(例如 inputfile_results_YYYYMMDD)。
  • 代码可以检查文件是否已经被处理并跳到下一个,这有助于从头开始,特别是如果您检查文件是否被处理的方法是使用输出的存在(带有时间戳!)。
  • 使用 try() 确保失败不会停止 future 的迭代 - 但是这应该会产生警告/输出以通知失败,以便您稍后可以返回。
  • 一种抽象的方法可以是创建一个处理单个文件的单个脚本,它可以只包含从第一点开始的函数,然后执行 setTimeLimit() 并提供一个时间,如果文件未处理 code will stop running .使用 bash 脚本迭代此脚本,该脚本使用可以传递参数(例如文件路径)的 Rscript 调用所述 R 脚本。这种方法可能有助于避免卡住,但取决于您是否了解并设置可接受的时间。
  • 在处理代码时确定文件是否太大而无法内存,可能需要调整以提高内存效率或更改代码以增量处理数据以免内存不足。
  • 减少计算机上可能占用可能导致卡住的资源的其他任务。

这些只是您想到的一些想法,可能是您的示例中需要考虑的事情(鉴于提供的信息)。这将有助于查看一些代码并了解您对每个文件进行了何种处理。

关于R 数小时内无法处理繁重的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54514443/

相关文章:

r - 使用 R 和 tidyverse 将 tidy 表转换为深度嵌套列表

r - 循环中lm()输入字符串的问题

r - 如何在集群上使用 doRedis 和 caret?

c++ - 内存泄漏问题

c# - 锁定是否确保从缓存中清除读取和写入?如果是这样,如何?

r - 根据组的第一个值填充每组的 NA 值

javascript - 无限循环运行 5 次后重置

java - 如何循环主类

循环内的 JavaScript 闭包 – 简单的实际示例

在所有其他大小都合适后,构建大小为 520010 的 float 组会使我的代码崩溃