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

s.w*_*lis 6 r ulimit

我正在尝试使用R中spread()tidyr包中的函数来处理具有大约300万个观测值的数据帧.它返回以下错误消息:

Error : C stack usage  26498106 is too close to the limit
Run Code Online (Sandbox Code Playgroud)

当我跑步时Cstack_info(),它告诉我

> Cstack_info()
      size    current  direction eval_depth 
   7969177      15272          1          2 
Run Code Online (Sandbox Code Playgroud)

根据这个问题的答案中的建议,我尝试通过ulimit -s 32768在终端窗口中运行并从终端打开Rstudio来增加堆栈大小.但是,当我尝试这个时,输出Cstack_info()没有改变,当我运行我的代码时,我收到相同的错误消息.继同一个早期问题的另一个答案后,我尝试更新R和Rstudio,也无济于事.我在这做错了什么?

我在mac os x 10.12.2上运行R 3.3,内存为16 GB.

小智 3

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

在设置 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 
Run Code Online (Sandbox Code Playgroud)

设置 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>
Run Code Online (Sandbox Code Playgroud)

重启后:

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

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

$ sudo launchctl limit
stack       67104768       67104768  
Run Code Online (Sandbox Code Playgroud)

R 版本 3.5.0
macOS High Sierra 10.13.5