我正在尝试在R中运行一些相当深层次的递归代码,但它一直给我这个错误:
Error: C stack usage is too close to the limit
CStack_info()
的输出是:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
我的机器内存很充足,我只是想找出如何增加 R 的 CStack。
编辑:有人要求提供可重现的示例。以下是一些引起问题的基本示例代码。运行 f(1,1) 几次,您就会得到错误。请注意,我已经设置了 --max-ppsize=500000 和 options(expressions=500000),因此如果您没有设置这些选项,可能会出现与其中一个选项相关的错误。正如您所看到的,递归深度可以相当深,我不知道该如何使其始终正常工作。谢谢。
f <- function(root=1,lambda=1) {
x <- c(0,1);
prob <- c(1/(lambda+1),lambda/(lambda+1));
repeat {
if(root == 0) {
break;
}
else {
child <- sample(x,2,replace=TRUE,prob);
if(child[1] == 0 && child[2] == 0) {
break;
}
if(child[1] == 1) {
child[1] <- f(root=child[1],lambda);
}
if(child[2] == 1 && child[1] == 0) {
child[2] <- f(root=child[2],lambda);
}
}
if(child[1] == 0 && child[2] == 0) {
break;
}
if(child[1] == 1 || child[2] == 1) {
root <- sample(x,1,replace=TRUE,prob);
}
}
return(root)
}
options(expressions = somethinglarge)
。 - mnel