Функция R stop () не применяется в операторе if else - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь автоматически проверить некоторую часть моего R-сценария следующим образом:

... other R code before...

if( Table1$date==Sys.Date() ){print("Successful check, all good to proceed")
}else{print("Execution stopped. Check Table1");stop()}

... other R code after...

В случае неудачной проверки я вижу следующее сообщение, но R-сценарий продолжается без остановки как и следовало ожидать от команды stop(). Как я могу это исправить?

[1] "Execution stopped. Check Table1"
Error: 

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Я предполагаю, что вы выполняете это в интерактивной R-сессии, возможно, RStudio. В том случае, когда вы запускаете весь файл, каждая строка выполняется независимо от того, какие предыдущие строки были успешными или нет. Если вместо этого вы запустите сценарий из командной строки / терминала операционной системы, он сломается на stop(), когда условие оператора if() - ЛОЖЬ.

Попробуйте сделать это, чтобы увидеть, что происходит, когда условие ЛОЖЬ:

Rscript -e 'if(FALSE){print("Successful check, all good to proceed"}
else{print("Execution stopped. Check Table1");stop()};a<-1;a'

Попробуйте, чтобы увидеть, что происходит, когда условие ИСТИНА:

Rscript -e 'if(TRUE){print("Successful check, all good to proceed"}
else{print("Execution stopped. Check Table1");stop()};a<-1;a'

Чтобы добиться требуемого поведения, вы можете выполнить весь файл из командная строка / терминал операционной системы с Rscript или [edit:] просто перемещают дополнительный код в оператор if

Примерно так должно работать:

  if (check_date == Sys.Date()) {
    print("Successful check, all good to proceed")
    # more code here
  } else {
    stop("Execution stopped. Check Table1")
  }
}
0 голосов
/ 10 марта 2020

Во-первых, я бы предложил добавить более представительный пример кода.

В R вы можете заключить код print в функцию stop().

... other R code before...

if( Table1$date==Sys.Date() ){
    print("Successful check, all good to proceed")
} else {
    stop("Execution stopped. Check Table1")
}

... other R code after...

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