r - 如何在R中设置C堆栈的大小?

标签 r ulimit

我正在尝试使用 spread()来自 tidyr 的函数将 R 封装在一个包含大约 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。

最佳答案

我遇到了类似的情况,就我而言,我可以通过设置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

关于r - 如何在R中设置C堆栈的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181989/

相关文章:

ubuntu - docker run --ulimit cpu=10 超时后不会终止 java 进程

java - 带有java的linux ulimit不能正常工作

根据定界符反转/翻转两个字符串的两侧?

r - 为什么参数自举偏差和标准误差在这里为零?

r - nrow>100时data.table打印错误

macos - ulimit 第一次调用正常,第二次调用失败,为什么?

r - 根据 R 中的值使用条件颜色进行绘图

r - R 中的 C5.0 机器学习,测试数据准确率 100%

python - Python 中的 'ulimit' 是什么?

docker - 无法减少docker容器内的ulimit