Ich versuche, einen ziemlich tiefen rekursiven Code in R auszuführen, und es gibt mir immer wieder den folgenden Fehler:
Fehler: Die Verwendung des C-Stacks liegt zu nahe am Grenzwert
Meine Ausgabe von CStack_info()
ist:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
Ich habe viel Speicher auf meinem Computer. Ich versuche nur herauszufinden, wie ich den CStack für R erhöhen kann.
EDIT: Jemand hat nach einem reproduzierbaren Beispiel gefragt. Hier ist ein grundlegender Beispielcode, der das Problem verursacht. Wenn Sie f (1,1) einige Male ausführen, wird der Fehler angezeigt. Beachten Sie, dass ich bereits --max-ppsize = 500000 und Optionen (Ausdrücke = 500000) festgelegt habe. Wenn Sie diese nicht festlegen, wird möglicherweise stattdessen eine Fehlermeldung zu einem dieser beiden Dinge angezeigt. Wie Sie sehen können, kann die Rekursion hier ziemlich tief gehen, und ich habe keine Ahnung, wie ich sie konsistent zum Laufen bringen kann. Vielen Dank.
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)