【问题标题】:Where does R store temporary filesR在哪里存储临时文件
【发布时间】:2012-11-14 01:58:51
【问题描述】:

我正在 Macbook Air 上运行一些基本的数据处理(4GB 内存,120GB HD 和 8GB 可用)。我的输入文件大约是 40 MB,直到过程结束我才向磁盘写入任何内容。但是,在我的过程中,我的 Mac 说没有内存可以运行。我检查了硬盘,发现还剩下大约 500MB。 所以这是我的问题:

  1. R 怎么可能这么快就填满了我的磁盘?我的理解是 R 将所有内容都存储在内存中(除非我明确地将某些内容写入磁盘)。
  2. 如果 R 确实在磁盘上写入了临时文件,我怎样才能找到这些文件并删除它们?

非常感谢。

更新 1:我收到的错误消息:

Force Quit Applications: Your Mac OS X startup disk has no more space available for 
application memory

更新 2:我检查了 tempdir(),它显示“var/folders/k_xxxxxxx/T//Rtmpdp9GCo”。但我无法从我的 Finder 中找到该导演

更新 3:在 R 中 unlink(tempdir(),recursive=TRUE) 并重新启动计算机后,我恢复了磁盘空间。我仍然想知道R是否会在我的硬盘上写入以避免将来出现类似情况。

更新 4:我的主要对象大约是 1GB。我使用活动监视器来跟踪进程,虽然内存使用量约为 2GB,但磁盘活动非常高:数据读取:14GB,数据写入,44GB。我不知道 R 在写什么。

【问题讨论】:

  • 尝试:tempdir(),但请阅读帮助文件
  • 您的数据是什么样的?您尝试执行的“基本数据操作”是什么?

标签: r memory


【解决方案1】:

是什么让您认为磁盘空间与此有关? R 需要将所有对象保存在内存中,而不是在磁盘之外(默认情况下;有附加包允许对磁盘上存储的文件的子集进行操作,该文件太大而无法放入 RAM)。

“进程”中的一个步骤是导致 R 从操作系统请求一块 RAM 以使其能够继续。操作系统无法遵守,因此 R 终止了您正在运行的“进程”,并显示您未能提供给我们的错误消息。 [提示,如果您显示实际错误而不是您的释义,这将有所帮助。您正在运行的代码的一些暗示也会有所帮助。 40MB 的磁盘空间听起来像是一个相当大的文件;多少行/列等? R中的对象有多大; object.size()?

【讨论】:

  • 嗨,Gavin,请查看我的更新。我认为是磁盘空间 b/c 在进程开始时我的硬盘中有 8GB,而在进程中间,我只有 500MB(我没有运行其他应用程序)。我有大约 300 万行,大约 30 列。由于上述错误,我无法再测试我的对象大小。 :-(
  • ??所以它只是将这些数据加载到 R 中?提示,你能把这个“过程”分解成单独的块吗?如果您甚至无法读取数据,请参阅?read.table(假设这是表格/电子表格数据),因为传入数据类型可能会有所帮助。
  • 虽然我这里的任何机器上都没有 MacOS X,但听起来你已经用尽了所有的物理 RAM 和可用的 SWAP 空间。
  • SWAP 空间是硬盘的一部分吗?对不起一个基本问题:)
  • 是的,在 Linux 上,它是磁盘的一个单独分区,操作系统可以将其视为“内存”,但速度很慢,因此它只会将那些从 RAM 寻址的内存分页到 SWAP 空间没有被使用。也就是说,SWAP 空间通常已经分配,​​因此不会出现在磁盘上的未使用空间中;它已经在使用中,即使当前 SWAP 中没有任何内容。
【解决方案2】:

R 写入一个临时的每个会话目录,它也在退出时清理该目录。

它遵循约定并尊重 TMP 和相关的环境变量。

【讨论】:

  • 这里有什么理由应该涉及磁盘吗?可能只是物理 RAM 用完了...?
  • 谢谢德克。如果我强制退出 R,有没有办法手动清理它?
  • @AdamNYC this 展示了如何完全删除当前会话中的所有临时文件