избегая вызовов браузера в R - PullRequest
7 голосов
/ 17 июня 2011

У меня есть сложный скрипт, который охватывает несколько функций (и файлов). В целях отладки мне нужно встраивать browser звонки во все виды закоулков. Когда я, по-видимому, что-то исправляю, я хочу запустить все без отладки, поэтому избегая вызовов browser, потому что комментирование всех вызовов браузера будет означать значительные усилия с моей стороны. @mdsumner в R chat предложил запустить скрипт в неинтерактивном режиме (то есть с помощью Rscript.exe в Windows), но я бы выиграл от того, что это сделано в моей консоли, чтобы иметь возможность доступа, например, traceback. Я просмотрел документацию по браузеру и не могу найти вариант, который бы приблизился к тому, чего я пытаюсь достичь. Есть предложения?

Ответы [ 3 ]

8 голосов
/ 17 июня 2011

Вот три варианта:

1) Перезаписать команду браузера .Добавьте эту команду в свое глобальное рабочее пространство, чтобы отключить команды браузера:

browser <- list

и включить ее снова

rm(browser)

Это, вероятно, самый простой, но немного уродливый из-запеременная browser, оставленная в глобальной среде.

Следующие два решения немного длиннее, но вместо этого используют опции, чтобы в глобальную среду не вводились новые переменные.Кроме того, они таковы, что, если никакие параметры не установлены, отладка не производится, поэтому вам нужно только установить параметр, если вы хотите отладку.Решение if может быть быстрее, чем решение expr, хотя, скорее всего, оно не существенно.

2) Использовать аргумент expr = с параметром .Замените каждую команду браузера на:

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

, а затем задайте для параметра "Debug" значение TRUE, чтобы включить отладку.

options(Debug = TRUE)

или задайте для него другое значение или удалитечтобы отключить отладку:

options(Debug = NULL)

3) Используйте, если с опцией .Замените каждую команду браузера на:

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

, а затем установите параметр Debug или нет, как в предыдущем пункте.

4 голосов
/ 17 июня 2011

Определите глобальное логическое значение

debug_mode <- TRUE

и затем вместо browser() используйте

if (debug_mode) browser()
2 голосов
/ 17 июня 2011

Я думаю, что это сводится к нюансам использования функции отладки. Если вы хотите выборочно контролировать использование browser(), поместите его в if, что позволит вам включить или отключить отладку для функции. Если вы хотите, чтобы браузер вызывался, сделайте это явным, как

myfun(x, debug =  TRUE)
...