Я пытаюсь запустить довольно глубокий рекурсивный код в R, и он продолжает давать мне эту ошибку:
Ошибка: использование стека C слишком близко к пределу
Мой вывод CStack_info()
:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
У меня на машине много памяти, я просто пытаюсь понять, как можно увеличить CStack для R.
РЕДАКТИРОВАТЬ: Кто-то попросил воспроизводимый пример. Вот базовый пример кода, вызывающего проблему. Выполнив 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)