นี่คือรหัส R ของฉัน ฟังก์ชั่นถูกกำหนดเป็น:
f <- function(x, T) {
10 * sin(0.3 * x) * sin(1.3 * x ^ 2) + 0.001 * x ^ 3 + 0.2 * x + 80
}
g <- function(x, T, f=f) {
exp(-f(x) / T)
}
test <- function(g=g, T=1) {
g(1, T)
}
ข้อผิดพลาดในการทำงานคือ:
> test ()
ข้อผิดพลาดในการทดสอบ ():
สัญญาแล้วภายใต้การประเมินผล: การอ้างอิงอาร์กิวเมนต์เริ่มต้นซ้ำหรือปัญหาก่อนหน้านี้?
หากฉันแทนที่คำจำกัดความของf
ในg
นั้นข้อผิดพลาดจะหายไป
ฉันสงสัยว่าข้อผิดพลาดคืออะไร วิธีการแก้ไขถ้าไม่แทนที่คำจำกัดความf
ในนั้นg
? ขอบคุณ!
ปรับปรุง:
ขอบคุณ! สองคำถาม:
(1) ถ้าฟังก์ชั่นtest
นั้นเป็นที่ถกเถียงกันf
มากขึ้นคุณจะเพิ่มอะไรอีกtest <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
ไหม ในกรณีที่มี recursions มากขึ้นก็เป็นสิ่งที่ดีและปลอดภัยในการปฏิบัติงานเพิ่มมากขึ้น ?
(2) ถ้าf
เป็นข้อโต้แย้งที่ไม่ใช่ฟังก์ชั่นตัวอย่างเช่นg <- function(x, T, f=f){ exp(-f*x/T) }
และtest <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
จะใช้ชื่อเดียวกันสำหรับข้อโต้แย้งทั้งที่เป็นทางการและไม่จริงและเป็นการปฏิบัติที่ดีและปลอดภัยหรืออาจก่อให้เกิดปัญหาที่อาจเกิดขึ้น?