Вопрос

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

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

<Ол>
  • посмотри, что именно пошло не так;
  • отладка в интерактивном режиме в R (поскольку скрипт ожидает параметры командной строки.)
  • У кого-нибудь есть пример кода и он готов поделиться?

    Это было полезно?

    Решение

    Вы можете передать аргументы командной строки в интерактивную оболочку с помощью --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 () для отладки.

    Другие советы

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top