Estou tentando executar um código recursivo bastante profundo em R e ele continua me apresentando este erro:
Erro: o uso da pilha C está muito próximo do limite
Minha saída CStack_info()
é:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
Tenho muita memória em minha máquina, só estou tentando descobrir como posso aumentar o CStack para R.
EDIT: Alguém pediu um exemplo reproduzível. Aqui está um exemplo de código básico que causa o problema. Executando f (1,1) algumas vezes você obterá o erro. Observe que eu já configurei --max-ppsize = 500000 e options (expression = 500000), portanto, se você não configurá-los, poderá obter um erro sobre uma dessas duas coisas. Como você pode ver, a recursão pode ser muito profunda aqui e não tenho ideia de como fazê-la funcionar de forma consistente. Obrigado.
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)