Я намагаюся запустити якийсь досить глибокий рекурсивний код у R, і він продовжує видавати мені цю помилку:
Помилка: використання стека C занадто близько до межі
Мій результат із CStack_info()
:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
На моїй машині достатньо пам’яті, я просто намагаюся зрозуміти, як я можу збільшити CStack для R.
EDIT: Хтось попросив відтворюваний приклад. Ось декілька основних зразків коду, які спричиняють проблему. Запустивши f (1,1) кілька разів, ви отримаєте помилку. Зверніть увагу, що я вже встановив --max-ppsize = 500000 та параметри (вирази = 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)
}
options(expressions = somethinglarge)