Как пройти через скрипт R с самого начала? - PullRequest
30 голосов
/ 20 сентября 2011

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

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

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

Ответы [ 6 ]

19 голосов
/ 04 апреля 2015

Я ломал голову, пытаясь выяснить это (шагая по сценарию без специальной функции для вызова) в версии IDE RStudio 0.98.1102.

Решение для нового скрипта в RStudio:

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

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

8 голосов
/ 20 сентября 2011

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

  1. Скачать RStudio
  2. Откройте скрипт R
  3. наведите курсор на первую строку
  4. нажмите Ctrl + Enter (ПК / Linux) или команду + возврат (Mac)
  5. повторить!

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

7 голосов
/ 20 сентября 2011

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

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

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

6 голосов
/ 20 сентября 2011

Для решения только для 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 голосов
/ 23 апреля 2014

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

1 голос
/ 14 марта 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...