Избегая вызовов браузера в R

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

3 ответа

Решение

Вот три возможности:

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 вариант или нет как в предыдущем пункте.

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

debug_mode <- TRUE

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

if (debug_mode) browser()

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

myfun(x, debug =  TRUE)
Другие вопросы по тегам