У меня сложный script, который охватывает несколько функций (и файлов). Для целей отладки мне нужно вставлять вызовы browser
во всевозможные уголки и трещины. Когда я, по-видимому, что-то исправляю, я хочу запустить все без отладки, ergo избегая вызовов browser
, потому что комментирование всех вызовов браузеров будет означать значительные усилия с моей стороны. @mdsumner on R chat предложил запустить script в неинтерактивном режиме (т.е. с помощью Rscript.exe в Windows), но мне было бы полезно, если бы это было сделано на моей консоли, чтобы иметь возможность получить доступ, например, traceback
. Я прошел через браузерные документы, и я не могу найти вариант, который приблизился бы к тому, чего я пытаюсь достичь. Любые предложения?
Избегая вызовов браузера в R
Ответ 1
Вот три возможности:
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
или нет, как в предыдущей точке.
Ответ 2
Определить глобальное логическое значение
debug_mode <- TRUE
а затем вместо browser()
используйте
if (debug_mode) browser()
Ответ 3
Я думаю, что это просто связано с тонким использованием функции отладки. Если вы хотите выборочно контролировать использование browser()
, поместите его внутри if
, который позволяет включать или отключать отладку для этой функции. Когда вы хотите, чтобы браузер вызывался, сделайте это явным, как
myfun(x, debug = TRUE)