Sto tentando di eseguire del codice ricorsivo abbastanza profonda nella R e continua a darmi questo errore:Errore: C utilizzo stack è troppo vicino al limite
Error: C stack usage is too close to the limit
La mia uscita da CStack_info()
è:
Cstack_info()
size current direction eval_depth
67108864 8120 1 2
ho un sacco di memoria sulla mia macchina, io sto solo cercando di capire come posso aumentare la CStack per R.
EDIT: qualcuno ha chiesto per esempio riproducibile. Ecco alcuni codici di esempio di base che causano il problema. Eseguendo f (1,1) un paio di volte otterrai l'errore. Tieni presente che ho già impostato --max-ppsize = 500000 e opzioni (espressioni = 500000), quindi se non li imposti potresti ottenere un errore su una di queste due cose. Come puoi vedere, la ricorsione può andare piuttosto in profondità qui e non ho idea di come farlo funzionare in modo coerente. Grazie.
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)
}
Questo [domanda] (http://stackoverflow.com/q/8997198/1385941) suggerisce forse 'opzioni (espressioni = somethinglarge) ' – mnel
@mnel L'altezza di annidamento delle espressioni, lo stack di protezione del puntatore e lo stack di C sono tre cose distinte (ma correlate). – zwol
Grazie mille per la tua pronta risposta, Zack. Penso che la tua risposta potrebbe essere per un sistema operativo Linux? Al momento sto eseguendo Windows 7 a 64 bit, questo cambia le cose? Grazie ancora per qualsiasi aiuto. – user2045093