我尝试在 R 语言中运行一些相当深入的递归代码,结果总是出现这样的错误:
错误: C 堆栈的使用过于接近限制
我从 CStack_info()
得到的输出是:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
我的机器上有很多内存,我只是想知道如何增加 R 的 CStack。
编辑: 有人要求一个可重复的例子。下面是一些导致问题的基本示例代码。运行 f (1,1)几次就会得到错误。注意,我已经设置了—— max-ppsize = 500000和 options (expression = 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)
}