ในบางจุดglm.fit
กำลังถูกเรียกตัว นั่นหมายความว่าหนึ่งในฟังก์ชั่นที่คุณโทรหรือหนึ่งในฟังก์ชั่นที่เรียกว่าโดยฟังก์ชั่นเหล่านั้นจะใช้อย่างใดอย่างหนึ่ง,glm
glm.fit
นอกจากนี้ที่ฉันพูดถึงในความคิดเห็นด้านบนนั่นคือคำเตือนไม่ใช่ข้อผิดพลาดซึ่งสร้างความแตกต่างอย่างมาก คุณไม่สามารถเรียกใช้เครื่องมือดีบักของ R ใด ๆ จากคำเตือน (ด้วยตัวเลือกเริ่มต้นก่อนที่จะมีคนบอกว่าฉันผิด ;-)
หากเราเปลี่ยนตัวเลือกเพื่อเปลี่ยนคำเตือนให้เป็นข้อผิดพลาดเราสามารถเริ่มใช้เครื่องมือดีบั๊กของ R ได้ จาก?options
เรามี:
‘warn’: sets the handling of warning messages. If ‘warn’ is
negative all warnings are ignored. If ‘warn’ is zero (the
default) warnings are stored until the top-level function
returns. If fewer than 10 warnings were signalled they will
be printed otherwise a message saying how many (max 50) were
signalled. An object called ‘last.warning’ is created and
can be printed through the function ‘warnings’. If ‘warn’ is
one, warnings are printed as they occur. If ‘warn’ is two or
larger all warnings are turned into errors.
ดังนั้นถ้าคุณวิ่ง
options(warn = 2)
จากนั้นเรียกใช้รหัสของคุณ R จะแสดงข้อผิดพลาด เมื่อถึงจุดนั้นคุณสามารถวิ่งได้
traceback()
เพื่อดูกลุ่มการโทร นี่คือตัวอย่าง
> options(warn = 2)
> foo <- function(x) bar(x + 2)
> bar <- function(y) warning("don't want to use 'y'!")
> foo(1)
Error in bar(x + 2) : (converted from warning) don't want to use 'y'!
> traceback()
7: doWithOneRestart(return(expr), restart)
6: withOneRestart(expr, restarts[[1L]])
5: withRestarts({
.Internal(.signalCondition(simpleWarning(msg, call), msg,
call))
.Internal(.dfltWarn(msg, call))
}, muffleWarning = function() NULL)
4: .signalSimpleWarning("don't want to use 'y'!", quote(bar(x +
2)))
3: warning("don't want to use 'y'!")
2: bar(x + 2)
1: foo(1)
คุณสามารถเพิกเฉยต่อเฟรมที่มีเครื่องหมาย4:
และสูงกว่าได้ที่นี่ เราเห็นว่ามีการfoo
เรียกbar
และbar
สร้างคำเตือน ซึ่งจะแสดงให้คุณเห็นว่าฟังก์ชันใดกำลังเรียกglm.fit
ใช้
หากคุณต้องการแก้ไขจุดบกพร่องในตอนนี้เราสามารถเปลี่ยนไปใช้ตัวเลือกอื่นเพื่อบอกให้ R ป้อนดีบักเกอร์เมื่อพบข้อผิดพลาดและเมื่อเราทำข้อผิดพลาดคำเตือนเราจะได้รับดีบักเกอร์เมื่อคำเตือนเดิมถูกทริกเกอร์ เพื่อที่คุณควรเรียกใช้:
options(error = recover)
นี่คือตัวอย่าง:
> options(error = recover)
> foo(1)
Error in bar(x + 2) : (converted from warning) don't want to use 'y'!
Enter a frame number, or 0 to exit
1: foo(1)
2: bar(x + 2)
3: warning("don't want to use 'y'!")
4: .signalSimpleWarning("don't want to use 'y'!", quote(bar(x + 2)))
5: withRestarts({
6: withOneRestart(expr, restarts[[1]])
7: doWithOneRestart(return(expr), restart)
Selection:
จากนั้นคุณสามารถเข้าไปในเฟรมเหล่านั้นเพื่อดูว่าเกิดอะไรขึ้นเมื่อมีการเตือน
หากต้องการรีเซ็ตตัวเลือกข้างต้นเป็นค่าเริ่มต้นให้ป้อน
options(error = NULL, warn = 0)
สำหรับคำเตือนเฉพาะที่คุณอ้างมีความเป็นไปได้สูงที่คุณจะต้องอนุญาตให้มีการทำซ้ำเพิ่มเติมในโค้ด เมื่อคุณพบสิ่งที่เรียกglm.fit
ทำงานออกวิธีที่จะผ่านมันcontrol
อาร์กิวเมนต์ใช้glm.control
- ?glm.control
ดู