ฉันพยายามเรียกใช้โค้ดวนซ้ำที่ค่อนข้างลึกใน R และมันทำให้ฉันมีข้อผิดพลาดนี้:
ข้อผิดพลาด: การใช้งาน C stack ใกล้ถึงขีด จำกัด มากเกินไป
ผลลัพธ์ของฉัน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)