отладка Литтлер / Rscripts - PullRequest
       20

отладка Литтлер / Rscripts

6 голосов
/ 26 октября 2009

Как мне отладить Rscripts, которые запускаются из командной строки?

В настоящее время я использую пакет getopt для передачи параметров командной строки, но в случае ошибки мне сложно:

  1. посмотри, что именно пошло не так;
  2. интерактивная отладка в R (так как скрипт ожидает параметры командной строки.)

У кого-нибудь есть пример кода и он готов поделиться?

Ответы [ 3 ]

6 голосов
/ 26 октября 2009

Вы можете передать свои аргументы командной строки в интерактивную оболочку с помощью --args, а затем установить ('') скрипт.

$ R --args -v

R version 2.8.1 (2008-12-22)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> require(getopt)
Loading required package: getopt
> opt = getopt(c(
+ 'verbose', 'v', 2, "integer"
+ ));
> opt
$verbose
[1] 1
> source('my_script.R')

Теперь вы можете использовать старую функцию browser () для отладки.

3 голосов
/ 26 октября 2009

Другой вариант - работать с опциями (ошибками). Вот простой пример:

options(error = quote({dump.frames(to.file=TRUE); q()}))

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

В противном случае, если есть определенные области, которые вас беспокоят (например, подключение к базе данных), оберните их в функцию tryCatch ().

3 голосов
/ 26 октября 2009

Я использую старые печатные заявления или интерактивный анализ. Для этого я сначала сохраняю состояние, используя save(), а затем загружаю его в интерактивный сеанс (для которого я использую Emacs / ESS). Это позволяет интерактивно работать с использованием кода скрипта построчно.

Но я часто пишу / тестирую / отлаживаю код в интерактивном режиме, прежде чем развернуть его в более мелком скрипте.

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