Rでかなり深い再帰コードを実行しようとしていますが、次のエラーが発生し続けます。
エラー:Cスタックの使用量が制限に近すぎます
私の出力CStack_info()
は次のとおりです。
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
マシンに十分なメモリがあります。CStackforRを増やす方法を見つけようとしています。
編集:誰かが再現可能な例を求めました。問題の原因となる基本的なサンプルコードを次に示します。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)
}
options(expressions = somethinglarge)