【问题标题】:Error: impossible to allocate a vector of size 58.8GB错误:无法分配大小为 58.8GB 的​​向量
【发布时间】:2020-05-18 17:19:32
【问题描述】:

我正在尝试使用 quanteda 包在 R 中进行一些字典分析,

toks_label <- tokens_lookup(toks, 
                            dict, 
                            valuetype = "regex",
                            levels = 1,
                            nested_scope = "dictionary")

但是当我运行此代码时,R 返回以下错误消息:

Error: impossible to allocate a vector of size 58.8GB

我发现这是 R 可用内存的问题。我在 Windows 10 上使用 Rstudio(版本 1.2.5042)和 R 4.0.0,我的电脑上有 12GB RAM,硬盘驱动器为 1To几乎是空的(740Gb 可用)。如何强制 R 将硬盘驱动器上的一些空间用作虚拟内存?

我已经尝试了几件事: 1)我已经编辑了项目 .Rprofile ,使其以 memory.limit() 开始,设置为 512000(对于 500Gb,对吗?),并且; 2) 我编辑了我的 .Renviron 文件以包含参数R_MAX_VSIZE=500Gb。 这些都没有奏效...

我还尝试通过字典分析降低我的野心: 1)我尝试在语料库的一个子集上运行完整的字典(34 个键和大约 300 个条目)。没用。 2)我尝试在完整的语料库上运行部分词典并且它有效。 我由此得出结论,我的字典太大了。有没有办法可以分块或迭代它?

【问题讨论】:

  • 我怀疑您的字典中有短语模式会产生大量组合。喜欢* *。您可以使用quanteda:::pattern2list() 进行检查。
  • @KoheiWatanabe,感谢您的回答。我试图用整个字典运行quanteda:::pattern2list(),但它也达到了我的内存限制。然后,我尝试在字典的第一部分运行它,如下所示:quanteda:::pattern2list(dict_topicsSimpler[["LIQUIDITY"]], types = typ, valuetype = "regex", concatenator = " ", levels = 2, case_insensitive = TRUE) 但返回了“0 列表”。
  • "List of 0" 表示该部分中没有匹配的模式。您可以检查所有部分以找出问题所在。

标签: r workspace quanteda


【解决方案1】:

在大多数情况下,稍微明智地重写代码将允许您读取较小的数据块,对其进行处理,将结果写入内存,删除输入(从而释放 RAM),然后读取下一个块。也就是说,在函数的输入端和输出端手动存储大型数据集。

否则,根据您的分页大小,您可以按照here 的描述设置 R_MAX_MEM_SIZE,或者安装包ff 并学习使用它来利用磁盘空间,就好像它是 RAM(“有点”为描述说)。

【讨论】:

  • 谢谢卡尔。我尝试了 R_MAX_MEM_SIZE 技巧,但它没有用。我已经深入研究了 ff 包文档,并且——作为我的 R 初学者——老实说,我没有看到如何在我的过程中使用它。
猜你喜欢
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 2022-10-22
  • 2012-06-10
相关资源
最近更新 更多