2015-04-22 3 views
4

Я запускаю скрипт в R (используя R Studio), который вызывает несколько вложенных функций (скрипт вызывает функцию, которая имеет некоторый код, а затем вызывает другую функцию и т. Д.). Мне нужно отладить функцию с несколькими уровнями. Я могу попасть в первую функцию, вызванную скриптом, поставив точку останова в строке с вызовом функции, а затем перейдя в функцию. Однако, когда я пытаюсь повторить этот шаг, чтобы перейти к следующей функции (имея точку останова в строке для следующего вызова функции), R просто продолжает выполнять код до тех пор, пока он не будет выполнен. Даже используя команду «продолжить», которая утверждает, что «продолжить выполнение до следующей точки останова».R Отладчик не останавливается на контрольных точках

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

Любые мысли приветствуются

ответ

1

debug очень удобно для задач такого рода. Скажем, вы хотите пройти через функцию myfun шаг за шагом. Просто запустите debug(myfun), прежде чем запускать код, и он будет вести себя так, как если бы у вас была точка останова в первой строке этой функции.

Это также работает, если функция вызывается из других функций или если она находится внутри пакета. В последнем случае это особенно полезно, потому что вы не можете просто изменить код функции, которая поступает из пакета.

+0

Получил это, спасибо! Мне пришлось немного поиграть с ним, чтобы получить то, что я хотел. Вы должны называть 'debug (myfunc)' для каждой вложенной функции (а не только той, которую вы хотите отлаживать), и убедитесь, что 'myfunc' был получен в текущей функции. – chtongueek

+0

Я думаю, что 'debug' должен работать над функцией, вызываемой внутри функции внутри функции ... без ее запуска на вызывающих функциях тоже. Но, похоже, существуют некоторые ограничения в отношении функций в пакетах, о которых я не знал. – Stibu

+0

Если это функция пакета (внутреннего), как я могу убедиться, что он был получен? –

Смежные вопросы