开始之前:
我知道这个错误有很多线程“在那里”,但它们似乎都没有将问题缩小到非常长的管道语句。
我偶然发现很长的管道(
%>%
)语句可以触发"Error: C stack usage is too close to the limit"
错误。
此外,我有权访问的一些机器会更早触发它,而其他机器会稍后触发它。
Ubuntu 20.04
与R 4.0.5
(rocker/r-ver:4.0.5
)跳跳虎稍后Ubuntu 22.04
与 R 4.3.2
(rocker/r-ver:4.3.2
) 跳跳虎早些时候
两台机器都返回
8192
,持续ulimit -s
。
由于我不想在这里粘贴数百行冗余代码,因此我将给出一个示例,该示例需要进行调整以适合在本地计算机上进行个人复制。在大多数机器上,将管道重复插入
mutate()
语句大约 1000 次应该可以解决问题。
library(dplyr)
df <- data.frame(col1 = 1:10000)
df <- df %>%
mutate(col1 = 1)
# uncomment and copy paste below lines until about 1000 mutate() statements are used
#mutate(col1 = 1) %>%
#mutate(col1 = 1) %>%
#mutate(col1 = 1) %>%
作为解决方案,我现在将长管道分解成更小的块,这样确实很容易。我仍然对该主题的更多背景感兴趣。
为什么会触发该错误?有人对此主题有一般想法吗?