Rでかなり深い再帰コードを実行しようとしていますが、このエラーが発生し続けます:
エラー: C スタックの使用量が限界に近すぎます
私の出力CStack_info()
は次のとおりです。
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
私のマシンには十分なメモリがあります.RのCStackを増やす方法を見つけようとしています.
編集:誰かが再現可能な例を求めました。問題の原因となる基本的なサンプル コードを次に示します。f(1,1) を数回実行すると、エラーが発生します。--max-ppsize = 500000 と options(expressions=500000) を既に設定しているので、これらを設定しないと、代わりにこれら 2 つのいずれかについてエラーが発生する可能性があることに注意してください。ご覧のとおり、再帰はここでかなり深くなる可能性があり、それを一貫して機能させる方法がわかりません。ありがとう。
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)
}