Как проверить нормальное завершение R скриптов, выполняемых из Perl? - PullRequest
7 голосов
/ 08 сентября 2010

Я написал скрипт shebang R и хотел бы выполнить его из скрипта Perl.В настоящее время я использую system ($my_r_script_path, $r_script_arg1, $r_script_arg2, ...), и мой вопрос заключается в том, как я могу убедиться, что скрипт R завершается нормально (без ошибок или предупреждений).

Полагаю, мне следует заставить свой скрипт R возвращать некоторое истинное значение в конце, только если всевсе в порядке, тогда поймайте это значение в Perl, но я не уверен, как это сделать.

Спасибо!

1 Ответ

4 голосов
/ 08 сентября 2010

Вы можете установить возвращаемое значение в команде quit(), например, q(status=1).По умолчанию 0, см. Также? Выход.Как отловить это в Perl, это все равно, что перехватить любое другое возвращаемое значение в Perl.Он сохраняется в специальной переменной $?, если я правильно помню.Смотрите также примеры в perldoc для system, там это должно быть проиллюстрировано.

В sidenote я бы просто использовал интерфейс R-Perl.Вы можете найти информацию и примеры здесь: http://www.omegahat.org/RSPerl/

Просто для полноты:

В начале вашего сценария вы можете поместить что-то вроде:

options(
    warn=2, # This will change all warnings into errors,
            # so warnings will also be handled like errors
    error= quote({
      sink(file="error.txt"); # save the error message in a file
      dump.frames();
      print(attr(last.dump,"error.message"));
      sink();
      q("no",status=1,FALSE) # standard way for R to end after errors
    })
)

Этосохранит сообщение об ошибке и выйдет из сеанса R без сохранения, с кодом выхода 1 и без запуска .Last.

Тем не менее, интерфейс R-Perl предлагает гораздо больше возможностей, которые стоит проверить, если вы собираетесь делать это чаще.

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