Как пройти через R script с самого начала?

Я хочу пройти через R script. Я видел команду "debug" при поиске того, как это сделать, но похоже, что это относится только к функциям. Этот script не имеет никаких функций.

Команда "браузер" выглядела многообещающе, поэтому я поставил "browser()" в качестве первой строки моего script, но она ничего не делала, когда я запускал ее.

Как мне сделать script для паузы в первой строке, чтобы я мог ее преодолеть?

Ответы

Ответ 1

Я изо всех сил пытался понять это (перейдя через script без конкретной функции для вызова) в RStudio IDE версии 0.98.1102.

Решение для нового script в RStudio:

  • Создайте новый R script (ctrl+shift+n)
  • Введите код в файл
  • Установите break point на
    • a) щелкнув слева от номера строки кода, где вы хотите установить break point (красная точка) или
    • b) добавление browser() в строку кода, где вы хотите установить break point
  • Сохранить файл
  • Введите режим отладки и отправьте файл
    • a) проверяя поле Source on Save (над окном Source), а затем сохраняя файл,
    • b) нажмите кнопку Source в правом верхнем углу окна Source,
    • c) введите debugSource("<yourfilename>") + enter в Console или
    • d) ввод ctrl+shift+s
  • Пройдите процесс отладки

Дополнительные действия по отладке в RStudio см. в этом файле справки (от 23 апреля 2015 года 12:59).

Ответ 2

Я частично отношусь к RStudio, поэтому рекомендую следующее:

  • Загрузите RStudio
  • Откройте R Script
  • наведите курсор на первую строку
  • нажмите ctrl + enter (ПК/Linux) или команду + return (Mac)
  • повторить!

Хорошей особенностью RStudio является то, что сервер RStudio может отлично работать на безголовом сервере. Затем вы подключаетесь к серверу через http в веб-браузере на своем локальном компьютере. Я использую эту конфигурацию при запуске R в экземплярах EC2. RStudio поддерживает состояние, поэтому, если я потеряю доступ к Интернету на поездке на поезде, когда я получу сигнал, RStudio подбирает именно то, где я остановился, и моя удаленная машина не подозревает, что я отключен и снова подключен. Обратите внимание, что сервер RStudio в настоящее время поддерживается только для FC/CentOS и Debian/Ubuntu. Хотя он может компилироваться под другие варианты * nix.

Ответ 3

Один из популярных способов - сделать это из вашей IDE или редактора - Emacs/ESS сделать это очень хорошо, другие тоже делают это.

Основная идея заключается в том, что вы отправляете либо строку под курсорами, либо функцию, либо блокируете... связанный с R процесс. Несколько других редакторов поддерживают это, в том числе RStudio. Мои предпочтения по-прежнему остаются с ESS, но я уверен, что вы можете найти что-то подходящее.

Наконец, browser() et al может сделать это изнутри процесса R, но он немного менее заостренный. Прочтите документацию или книги, такие как Chambers "Программное обеспечение для анализа данных" (Springer, 2008).

Ответ 4

Для решения только R, которое оценивает полные выражения, а не отдельные строки, попробуйте следующее:

sourcep <- function(file){
  coms <- parse(file)
  for (i in seq_along(coms)){
    print(coms[[i]])
    eval(coms[[i]],envir=.GlobalEnv)
    mess <- paste("Expression",i,"of",length(coms),"parsed. Press <return> to continue.")
    cat(mess)
    readLines(n=1)
  }
}

Вы называете это так же, как вы бы назовёте source (хотя это гораздо более основательно и не включает никаких его опций). В основном, он использует parse для создания списка проанализированных, но неоцененных выражений из исходного файла, а затем итерации через этот список, чтобы распечатать выражение, оценить его в глобальной среде, а затем поместить сообщение, чтобы указать прогессию. Последняя строка - это та, которая создает паузу: вызов для чтения одной строки из stdin().

Ответ 5

Вы отмечаете в комментарии, что вы запускаете свой код с помощью Rscript, но для отладки вам нужно запустить его в интерактивном режиме. Другими словами, чтобы browser "работать", запустите обычную консоль R и source ваш script. Поскольку первая строка script равна browser(), вы сразу же вернетесь к приглашению, в котором вы можете использовать "n" для одного шага через код. Но поскольку это полномасштабное приглашение R, вы также можете проверить или изменить любое значение переменной, просто набрав его имя или назначив ему. (Или, действительно, вызывать произвольные R-функции.)

Ответ 6

Как было предложено в другом ответе, вставив browser() в начале вашего скрипта, получив интерактивный сеанс, запустив R а не Rscript, а затем используя source('myscript.Rscript') из R, сделайте трюк, если ваш скрипт не требуют аргументы со строкой (например, такие, как обработанные argparse).

Если вам нужно запустить с помощью команд командной строки, вы можете просто вызвать R с параметрами --args (например, R --no-restore --no-save --args <your commandline args here>), и сценарий с исходным кодом увидит аргументы, как если бы он был вызван с использованием Rscript. Существуют и другие решения вопроса о том, как передать аргументы командной строки source, но они не нацелены на этот конкретный вариант использования, когда source будет вызываться только один раз.