2011-06-17 107 views
7

我有一個跨多個函數(和文件)的詳細腳本。爲了調試目的,我需要將browser調用嵌入到各種角落和縫隙中。當我大概解決某些問題時,我想在不調試的情況下運行整個系統,因此避免使用browser調用,因爲註釋掉所有瀏覽器調用意味着我會付出相當大的努力。 R chat上的@mdsumner建議以非交互模式運行腳本(即在Windows上使用Rscript.exe),但我可以從我的控制檯中完成該操作,以便能夠訪問例如traceback。我已經瀏覽了瀏覽器文檔,並且找不到可以接近我想要實現的選項。有什麼建議麼?避免R中的瀏覽器調用

+1

看看最近發佈的這個非常類似的問題的答案:http://stackoverflow.com/q/6286092/602276 – Andrie 2011-06-17 08:14:47

+0

我將使用'options(debug =「FALSE」)'和函數內部:'if(options(「debug」))browser()'。謝謝! – 2011-06-17 08:28:54

+1

將其包含在名爲'dbrowser'的函數定義中,並用dbrowser()替換所有瀏覽器()調用 - 而不是用if(options)-browser兩行代碼替換它們。 – Spacedman 2011-06-17 09:27:27

回答

8

這裏有三個possibliities:

1)覆蓋瀏覽器命令。這個命令添加到您的全局工作空間打開瀏覽器命令關閉:

browser <- list 

,並重新打開它

rm(browser) 

這可能是最簡單的,但就是有點難看由於browser變量之中留在全球環境中。

接下來的兩個解決方案稍微長一點,但使用選項,以便沒有新的變量引入全球環境。它們也是這樣的,如果沒有設置任何選項,則不進行調試,因此如果要調試,只需設置一個選項。 if解決方案可能比expr解決方案更快,雖然它可能不重要。

2)使用expr =參數與選項。替換爲每個瀏覽器命令:

​​

然後定義"Debug"選項是TRUE來啓用調試。

options(Debug = TRUE) 

或將其設置爲別的東西或刪除其打開調試關:

options(Debug = NULL) 

3)使用,如果一個選項。替換爲每個瀏覽器命令:

if (isTRUE(getOption("Debug"))) browser() 

然後設置Debug選項或不如在現有點。

+0

邁克爾和馬雷克的所有好評,但我選擇這一個作爲正確的,因爲它有三種方法的概述。 – 2011-06-17 14:44:42

2

我認爲這只是微妙地使用調試功能。如果要選擇性控制browser()的使用,請將其放入if中,以便啓用或禁用該功能的調試。當你想瀏覽器中調用,做出明確的像

myfun(x, debug = TRUE) 
4

定義,而不是browser()利用全球邏輯值

debug_mode <- TRUE 

然後

if (debug_mode) browser()