天天看點

《資料科學:R語言實作》——1.11 調試函數

本節書摘來自華章計算機《資料科學:r語言實作》一書中的第1章,第1.11節,作者 丘祐玮(david chiu),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

作為一個程式員,調試是日常最常見的任務。最簡單的調試方法是在期望的位置插入一條列印語句;然而,這種方法很低效。這裡,我們會展示如何使用一些r調試工具來加速調試過程。

確定你已經在作業系統中安裝了r語言,完成了之前的步驟。

執行下列步驟,來調試r函數。

1.首先,我們建立函數debugfunc,其帶有參數x和y,但是我們隻傳回x:

《資料科學:R語言實作》——1.11 調試函數

2.然後我們隻把2傳遞給dubugfunc:

《資料科學:R語言實作》——1.11 調試函數

3.接着,我們對函數debugfunc應用函數debug:

《資料科學:R語言實作》——1.11 調試函數

4.現在,我們再把2傳遞給dubugfunc:

《資料科學:R語言實作》——1.11 調試函數

5.你可以鍵入help來檢視所有的指令:

《資料科學:R語言實作》——1.11 調試函數

6.然後,你可以鍵入n來進入下一個調試步驟:

《資料科學:R語言實作》——1.11 調試函數

7.現在你可以使用objects或者ls列出所有的變量:

《資料科學:R語言實作》——1.11 調試函數
《資料科學:R語言實作》——1.11 調試函數

8.在每一步中,你都可以鍵入變量名來擷取目前的值:

《資料科學:R語言實作》——1.11 調試函數

9.在最後一步中,你可以通過鍵入指令q來跳出調試模式:

《資料科學:R語言實作》——1.11 調試函數

10.你可以使用函數undebug離開調試模式:

《資料科學:R語言實作》——1.11 調試函數

11.接下來,讓我們使用函數browser來調試:

《資料科學:R語言實作》——1.11 調試函數

12.調試函數會直接進入函數browser所在的位置:

《資料科學:R語言實作》——1.11 調試函數

13.為了恢複調試過程,可以在浏覽過程中鍵入recover:

《資料科學:R語言實作》——1.11 調試函數

14.另外,你可以使用函數trace給步驟4中的函數debug插入代碼:

《資料科學:R語言實作》——1.11 調試函數

15.你可以從步驟4跟蹤調試過程,并判定插入的代碼:

《資料科學:R語言實作》——1.11 調試函數
《資料科學:R語言實作》——1.11 調試函數

你也可以使用函數trace來跟蹤某個函數的使用:

《資料科學:R語言實作》——1.11 調試函數

你還可以使用函數traceback來列印函數的調用堆棧:

《資料科學:R語言實作》——1.11 調試函數

由于所有的代碼都無法避免缺陷,是以r程式員同樣需要準備好優秀的調試工具,做好調試的準備。在本教程中,我們展示了如何使用函數debug、browser、trace和traceback來調試函數。

在第1部分中,我們講解了如何使用debug對已有函數進行調試。我們首先建立了一個名為debugfunc的函數,其帶有兩個輸入參數:x和y。然後,我們對函數debugfunc使用debug。這裡,我們把函數debug用到名稱、參數或者函數上。在這裡,不論任何時候調用debugfunc,我們的r控制台都通過每行開始的browse彈窗進入浏覽器模式。

浏覽器模式允許我們逐漸執行函數運算。我們将一些在調試過程中可能用到的單字母指令歸納為下表。

《資料科學:R語言實作》——1.11 調試函數

在下面的操作中,我們首先使用help來列出所有的指令。然後我們鍵入n來進入下一行。接着,我們鍵入objects和ls列出所有目前的對象。現在,我們可鍵入變量名來找出每個對象目前的值。最後我們鍵入q跳出調試模式,并使用undebug取消對函數的辨別。

《資料科學:R語言實作》——1.11 調試函數

2.其次,在行數左邊設定斷點,如圖2的所示。

《資料科學:R語言實作》——1.11 調試函數

3.然後,儲存代碼檔案并單擊source激活調試過程,如圖3所示。

《資料科學:R語言實作》——1.11 調試函數

4.激活函數的時候,你的r控制台會進入browse模式,如圖4所示。

《資料科學:R語言實作》——1.11 調試函數

現在你可以使用指令行或者debug下拉菜單來調試函數,如圖5所示。

《資料科學:R語言實作》——1.11 調試函數

繼續閱讀