第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

R中調(diào)試的一般建議

R中調(diào)試的一般建議

Smart貓小萌 2019-07-09 16:30:00
R中調(diào)試的一般建議我在使用我編寫的R函數(shù)時(shí)出錯(cuò):Warning messages:1: glm.fit: algorithm did not converge  2: glm.fit: algorithm did not converge我所做的:逐步完成功能添加打印以找出錯(cuò)誤發(fā)生在哪一行,這意味著兩個(gè)不應(yīng)該使用的函數(shù)glm.fit..他們是window()和save().我的一般方法包括添加print和stop命令,并逐行遍歷函數(shù),直到找到異常為止。但是,我不清楚這些技術(shù)是從代碼中產(chǎn)生錯(cuò)誤的。我甚至不確定代碼中的哪些函數(shù)依賴于glm.fit..我該如何診斷這個(gè)問題?
查看完整描述

3 回答

?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

我認(rèn)為調(diào)試是一種藝術(shù)形式,所以沒有明確的銀彈。在任何語言中都有很好的調(diào)試策略,它們也適用于這里。讀這篇好文章)。例如,第一件事是重現(xiàn)問題.如果你不能這樣做,那么你需要獲得更多的信息(例如,通過日志記錄)。一旦你能復(fù)制它,你就需要減少一直到源頭。

與其說是“技巧”,不如說我有一個(gè)最喜歡的調(diào)試?yán)蹋?/trans>

  1. 當(dāng)發(fā)生錯(cuò)誤時(shí),我通常做的第一件事是通過調(diào)用

    traceback()

    :這顯示了錯(cuò)誤發(fā)生的位置,如果您有幾個(gè)嵌套函數(shù),這一點(diǎn)尤其有用。
  2. 接下來我會(huì)

    options(error=recover)

    這會(huì)立即切換到出現(xiàn)錯(cuò)誤的瀏覽器模式,這樣您就可以從那里瀏覽工作區(qū)。
  3. 如果我仍然沒有足夠的信息,我通常使用

    debug()

    函數(shù)并逐行遍歷腳本。

R2.10中最好的新技巧(當(dāng)處理腳本文件時(shí))是使用findLineNum()setBreakpoint()職能。

作為最后的評論:根據(jù)錯(cuò)誤,設(shè)置它也是非常有幫助的。try()tryCatch()關(guān)于外部函數(shù)調(diào)用的語句(特別是在處理S4類時(shí))。這有時(shí)會(huì)提供更多的信息,而且還能讓您更好地控制在運(yùn)行時(shí)如何處理錯(cuò)誤。

這些相關(guān)問題有很多建議:


查看完整回答
反對 回復(fù) 2019-07-09
?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

正如我所指出的另一個(gè)問題Rprof()summaryRprof()是很好的工具查找程序的慢部分這可能從加速或遷移到C/C+實(shí)現(xiàn)中獲益。如果您正在進(jìn)行模擬工作或其他計(jì)算機(jī)或數(shù)據(jù)密集型活動(dòng),這可能更適用。這個(gè)profr包裝可以幫助可視化結(jié)果。

我對調(diào)試有一點(diǎn)了解,所以另一個(gè)建議是另一個(gè)線程:

  • options(warn=2)

    將警告視為錯(cuò)誤

您也可以使用options在發(fā)生錯(cuò)誤或警告時(shí),使用您所選擇的最喜歡的調(diào)試功能,將您直接放到操作的熱度中。例如:

  • options(error=recover)

    recover()

    當(dāng)發(fā)生錯(cuò)誤時(shí),正如Shane所指出的(如

    r調(diào)試指南

    ..或者任何其他你認(rèn)為有用的函數(shù)都可以運(yùn)行。

另外兩種方法來自“Shane‘s”中的一種鏈接:

  • 將內(nèi)部函數(shù)調(diào)用包裝為

    try()

    若要返回更多信息,請執(zhí)行以下操作。
  • 對于*應(yīng)用函數(shù),使用

    .inform=TRUE

    (來自plyr包)作為Apply命令的選項(xiàng)

@JoShuaUlrich還指出運(yùn)用經(jīng)典的條件能力的巧妙方法browser()命令打開/關(guān)閉調(diào)試:

  • 放入您可能要調(diào)試的函數(shù)中。

    browser(expr=isTRUE(getOption("myDebug")))

  • 并將全局選項(xiàng)設(shè)置為

    options(myDebug=TRUE)

  • 您甚至可以包裝瀏覽器調(diào)用:

    myBrowse <- browser(expr=isTRUE(getOption("myDebug")))

    然后打電話給

    myBrowse()

    因?yàn)樗褂昧巳帧?/trans>

還有R2.10中的新功能:

  • findLineNum()

    獲取源文件名和行號,并返回函數(shù)和環(huán)境。當(dāng)你

    source()

    一個(gè).R文件,它在#n行返回一個(gè)錯(cuò)誤,但是您需要知道#n行中的函數(shù)是什么。
  • setBreakpoint()

    獲取源文件名和行號,并在其中設(shè)置斷點(diǎn)。

這個(gè)碼器包,特別是其checkUsage函數(shù)在快速獲取編譯器通常會(huì)報(bào)告的語法和樣式錯(cuò)誤(未使用的局部變量、未定義的全局函數(shù)和變量、部分參數(shù)匹配等)方面尤其有幫助。

setBreakpoint()是一個(gè)更方便用戶的前端trace()..有關(guān)如何工作的內(nèi)部結(jié)構(gòu)的詳細(xì)信息,可在最近R雜志的文章.

如果您正在嘗試調(diào)試其他人的包,一旦您找到了問題,您可以重寫它們的函數(shù)帶著fixInNamespaceassignInNamespace,但不要在生產(chǎn)代碼中使用此方法。

所有這些都不應(yīng)排除嘗試過的真實(shí)。標(biāo)準(zhǔn)R調(diào)試工具,其中一些在上面,另一些則不在上面。特別是,驗(yàn)尸調(diào)試工具當(dāng)您有一堆您不希望重新運(yùn)行的耗費(fèi)時(shí)間的代碼時(shí),非常方便。

最后,對于似乎不會(huì)拋出錯(cuò)誤消息的棘手問題,可以使用options(error=dump.frames)如本問題所詳述:沒有引發(fā)錯(cuò)誤的錯(cuò)誤


查看完整回答
反對 回復(fù) 2019-07-09
  • 3 回答
  • 0 關(guān)注
  • 954 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號