Как узнать номер строки, где происходит ошибка в R-скрипте? - PullRequest
0 голосов
/ 21 января 2019

Я отлаживаю модель.Входные данные подготавливаются с помощью Python-скрипта, который вызывает R-скрипт, посредством Python-вызова к subprocess.check_call() (теперь заменяется pbs.Command()).Этот скрипт R имеет различные ошибки.Когда в сценарии R возникает ошибка, мы можем увидеть сообщение об ошибке в стандартной ошибке, появляющейся над (или под) ошибкой python.Проблема в том, что сообщение об ошибке, возвращаемое R, возвращает только небольшую часть кода, где произошла ошибка, без номера строки.Затем мы должны найти этот фрагмент кода в исходном коде.Было бы проще, если бы у нас был фактический номер строки.

Соответствующий ответ предлагает использовать IDE для повторного прохождения всего кода R строка за строкой, но мы хотели бы знать номер строки, где происходит эта ошибка, чтобы мы могли по крайней мерезапустите весь код R до этой строки.

1 Ответ

0 голосов
/ 24 января 2019

Существует два способа запуска R, либо в интерактивном режиме, либо в неинтерактивном режиме.

Если вы запустите R в интерактивном режиме, вы сможете изучить текущую среду и состояниепеременные, когда ваш скрипт встречает ошибку.Но вы не сможете предоставить файл для запуска или передать ему аргументы из командной строки.Вам придется мучительно делать что-то вроде этого, вручную , каждый раз:

$ R
> argv = c('a', 'b', 'c')
> source('/path/to/script.R')

Если вы каким-либо образом предоставите файл для запуска из командной строки, вы запустите R внеинтерактивный режим.Это относится ко всем следующим командам:

$ R /path/to/script.R a b c
$ R < /path/to/script.R
$ R -e "argv = c('a', 'b', 'c'); source('path/to/script.R')"
$ R CMD BATCH /path/to/script.R a b c
$ Rscript --vanilla /path/to/script.R a b c

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

Из этого я делаю вывод, что язык R не предназначен для использования в каких-либо автоматизированных системах и не должен использоваться, если вы строите конвейер.Потому что вы не сможете отладить его.Конечно, R не следует использовать для создания сценариев, которые могут принимать аргументы из командной строки.R хорош только для интерактивного, исследовательского анализа и визуализации данных.

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