我有一个压缩文件列表[~90个文件]。我已经编写了一个循环来解压缩它们(每个文件大约1Gb),做一些计算,保存每个文件的输出并删除解压缩文件。此过程的一次迭代需要每个文件30-60分钟[并非所有文件的大小完全相同]。
我不太担心时间,因为我可以让它在周末工作。然而,R并没有设法完全通过。我在周五晚上离开了它,它只运行了12个小时,所以它只处理了90个文件中的30个。
我不经常处理这种类型的重型过程,但过去在类似过程中也是如此。我需要在循环中插入任何命令以避免计算机因此密集进程而冻结吗?我在循环结束时尝试了gc()
无济于事。
是否有针对此类程序的“良好做法”建议清单?
如果您的会话冻结,您可能会遇到需要隔离的问题,因为它可能是单个文件,或者您可能会受到内存限制或大量使用交换。
无论如何,这里有一些你可以实现的技巧或想法:
process_gz_folder()
这样的功能。然后遍历文件路径并调用每次创建的函数,这样可以保持全局环境的清洁。gc()
可以提供帮助,但这取决于情况以及是否清除了内存(例如在运行rm()
之后)。可以在第一点调用函数后使用。try()
确保故障不会阻止将来的迭代 - 但是这应该产生警告/输出以通知故障,以便您可以在以后返回。setTimeLimit()
并提供一个时间,如果文件未处理code will stop running。使用bash脚本迭代此脚本,使用Rscript
调用所述R脚本,该脚本可以传递参数(例如文件路径)。这种方法可能有助于避免冻结,但取决于您了解并设置可接受的时间。这些只是一些想到的想法,可能是您的示例中要考虑的事情(给定提供的信息)。查看一些代码并了解您在每个文件上执行的处理类型会有所帮助。
鉴于您提供的信息很少,很难说出问题究竟是什么。
如果可能的话,我会首先解压缩并连接文件。然后预处理数据并去除分析不需要的所有字段。然后,生成的文件将用作R的输入。
还要注意将输入字符串解析为例如时间戳可能非常耗时。