【问题标题】:How to set the size of the C stack in R?如何在 R 中设置 C 堆栈的大小?
【发布时间】:2017-08-28 03:55:52
【问题描述】:

我正在尝试将 R 中 tidyr 包中的 spread() 函数用于具有大约 300 万个观察值的数据框。它返回以下错误消息:

Error : C stack usage  26498106 is too close to the limit

当我运行Cstack_info() 时,它会告诉我

> Cstack_info()
      size    current  direction eval_depth 
   7969177      15272          1          2 

按照this 问题答案中的建议,我尝试通过在终端窗口中运行ulimit -s 32768 并从终端打开Rstudio 来增加堆栈大小。然而,当我尝试这个时,Cstack_info() 的输出没有改变,当我运行我的代码时,我得到了同样的错误消息。在对同一个较早问题的另一个答案之后,我尝试更新 R 和 Rstudio,但也无济于事。我在这里做错了什么?

我在 16 GB 内存的 mac os x 10.12.2 上运行 R 3.3。

【问题讨论】:

  • 如果无法避免传播,请慎重考虑。你可能可以而且应该。
  • 请不要使用 rstudio 标签,除非您有关于 rstudio 的具体问题。 R 和 rstudio 是独立的软件。
  • 感谢@Roland,我编写了不同的代码以避免传播,尽管它读起来很笨拙。有什么理由可以避免普遍传播吗?来自 Stata,我发现在创建新变量时像这样重塑我的数据很方便。
  • R data.frames 针对多行少列进行了优化。大多数 R 函数都需要“长格式”数据帧。

标签: r ulimit


【解决方案1】:

我遇到过类似的情况,就我而言,我可以通过设置launchctl限制来增加C Stack的大小。

在设置launchctl限制之前:

> Cstack_info()
      size    current  direction eval_depth 
   7969177      17072          1         2

$ ulimit -s
stack size              (kbytes, -s) 8192

$ sudo launchctl limit
stack       8388608        67104768 

设置launchctl限制:

$ cd /Library/LaunchDaemons/
$ sudo vi limit.stack.plist # create a new plist file to set new stack value

<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>stack</string>
      <string>67104768</string>
      <string>67104768</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

重启后:

> Cstack_info()
      size    current  direction eval_depth 
   63749529      17072          1          2

$ ulimit -s
stack size              (kbytes, -s) 65532

$ sudo launchctl limit
stack       67104768       67104768  

R 版本 3.5.0
macOS High Sierra 10.13.5

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多