Секреты науки о данных
Распространенные ошибки в R и методах отладки
Руководство для начинающих по отладке кода
Хотя каждая ошибка в программе уникальна, некоторые из них возникают часто и могут быть быстро исправлены. Это руководство призвано помочь вам исправить распространенные ошибки и дать советы, как понять ошибки в целом.
Ошибка: "не удалось найти функцию"
Эта ошибка возникает, когда пакет R загружен неправильно или из-за неправильного написания функций.
Ошибка: «Объект не найден»
Эта ошибка возникает, когда конкретный объект, используемый в коде, пуст.
Это происходит, если вы забыли инициализировать объект или забыли запустить строку, в которой вы инициализировали объект.
"Ошибка в случае"
«Ошибка в if» означает, что логический оператор в if() не дает логического значения. Большинство из них имеют пропущенные значения там, где требуется TRUE/FALSE.
"Ошибка: не удается открыть соединение"
У этой ошибки может быть две причины:
- Файл/соединение не может быть открыто, потому что R не может его найти (в основном из-за ошибки в пути)
- Ошибка в .onLoad(), потому что пакет не может найти системную зависимость.
Переустановите пакет .onLoad.
Ошибка: "Подстрочный индекс выходит за пределы"
Эта ошибка может возникнуть при неправильном использовании вложенных циклов в коде.
Ошибка: «нечисловой аргумент бинарного оператора»
Это прямо вперед. Оператор ожидает числовое значение, но вы ввели нечисловое значение.
Ошибка: «замена есть»
Эта ошибка возникает из-за несоответствия длин существующего оператора и заданного вектора значений.
Быстрые исправления:
- Проверьте правописание.
- Перепроверьте названия столбцов, чтобы убедиться, что вы правильно их поняли.
- Убедитесь, что вы выполнили каждую строку кода.
- Убедитесь, что все скобки закрыты.
- Убедитесь, что вы загрузили свои данные, прежде чем работать с ними.
- Убедитесь, что вы загрузили нужные вам библиотеки и пакеты.
- Перезапустите IDE.
- Проверьте устаревшие функции.
- Лишняя запятая проставлена по ошибке.
- Если ваша программа дала сбой, опубликуйте воспроизводимый пример в R-help.
Отладка среднего уровня
Когда вы начнете свой путь кодирования, вы будете постепенно работать с более крупными фрагментами кода. Это когда вы учитесь использовать сложные инструменты отладки, а следующие экспертные методы помогут вам отлаживать свой код самостоятельно. Если вы хотите проверить свой код и понять его еще лучше, попробуйте использовать эти отличные инструменты, предоставляемые RStudio:
- Функция RStudio
traceback()
и «стек вызовов», в котором перечислены последовательности вызовов, которые приводят к ошибке. options(error = browser)
RStudio, который открывает интерактивный сеанс, показывающий, где произошла ошибка.
Совет: работайте над небольшими фрагментами кода. Пробегитесь по каждой строке в поисках орфографических ошибок, незакрытых скобок, неверных названий столбцов и т. д.
Шаг 1. Определите последовательность звонков
Первый инструмент — это стек вызовов, последовательность вызовов, которые приводят к ошибке. Вот простой пример: функция a вызывает функцию b, но функция c добавляет строку с числом с плавающей запятой, создавая ошибку:
x <- function(a) g("a") y <- function(b) h("b") z <- function(c) a+"a" x(10)
Вывод:
Ошибка в a + «a»: нечисловой аргумент бинарного оператора
После запуска кода справа от сообщения об ошибке появляются две опции: «Показать трассировку» и «Повторить запуск с отладкой». Если вы нажмете «Показать трассировку», вы увидите:
4.i(c) 3.h(b) 2.g("a") 1.x(10)
Прочитайте стек вызовов снизу вверх: начальный вызов — x(10)
, который вызывает g("a")
, затем h(b)
, затем i(c)
, который вызывает ошибку.
Если вы вызываете код, который вы source()
d, в R, трассировка также будет отображать местоположение функции в форме filename.r#linenumber
. Нажав на нее, вы перейдете к соответствующей строке кода в редакторе.
Теперь вы обнаружили ошибку, но до сих пор не знаете, почему это произошло. Следующим полезным инструментом является интерактивный отладчик, который позволяет вам приостанавливать выполнение функции и интерактивно исследовать ее состояние.
Шаг 2. Ошибка просмотра
Самый простой способ войти в интерактивный отладчик — использовать инструмент RStudio «Rerun with Debug». Это повторно запускает команду, вызвавшую ошибку, приостанавливая выполнение там, где произошла ошибка. Теперь вы находитесь в интерактивном состоянии внутри функции и можете взаимодействовать с любым определенным там объектом. Вы увидите соответствующий код в редакторе (с выделенным оператором, который будет запущен следующим), объекты в текущей среде на панели «Среда», стек вызовов на панели «Отслеживание», и вы можете запустить произвольный R код в консоли.
Помимо любой обычной функции R, есть несколько специальных команд, которые можно использовать в режиме отладки. Вы можете получить к ним доступ либо с помощью панели инструментов RStudio, либо с помощью клавиатуры:
- «Далее» или
n
: выполнение следующего шага функции. - «Шаг внутрь» или
s
: если следующим шагом является функция, он войдет в эту функцию, чтобы вы могли работать с каждой строкой. - «Готово» или
f
: завершает выполнение текущего цикла или функции. - «Продолжить» или
c
: выход из интерактивной отладки и продолжение обычного выполнения функции. - «Стоп» или
Q
: останавливает отладку, завершает функцию и возвращает в глобальную рабочую область.
Благодаря этим советам вы теперь готовы к отладке собственного кода в будущих проектах.