RCaller: предотвратить автоматическую печать ошибок

Я использую RCaller для выполнения некоторого анализа фрейма данных в моем Java application. В частности, я хочу запустить Coarsened Exact Matching, используя библиотеку CEM из R.

Что касается CEM, он возвращает некоторые данные о сопоставлении, если найдено какое-либо совпадение. В противном случае (совпадение не найдено) происходит сбой.

Когда я вызываю метод runAndReturnResult из своего Java application, если CEM не работает внутри R, RCaller автоматически печатает на моем Java application's console весь код, который я добавил к моему экземпляру RCode.

Есть ли способ предотвратить эту печать? Я имею в виду, что хочу игнорировать случаи, когда совпадений не найдено, и двигаться вперед, не выводя сообщения на консоль.

Заранее спасибо всем, кто может помочь.


person Roberto    schedule 25.02.2016    source источник


Ответы (1)


Есть два способа справиться с этим:

  • RCaller использует java.util.logging.Logger, поэтому вам нужно добавить logback.xml - file для отключения вывода logger.
  • используйте tryCatch({}) внутри R, чтобы ваш R code не сломался -> не вызывал никаких ошибок в Java.

Я бы рекомендовал второе решение.

обновление:

вы должны добавить error - block

mat <- tryCatch({
   cem(treatment = "c_CLUSTER", data = df, drop = dp))
 }, error = function(e) {
    NULL # or do something else
 }, finally = {
 })

И если вы хотите игнорировать все warnings, заверните method call в suppressWarnings(<method-call>).

Или вы также можете добавить warning - block к tryCatch - block

person Paul    schedule 25.02.2016
comment
Спасибо, Павел, за ваше предложение. Я думаю, что tryCatch({}) - это то, что я ищу, но, к сожалению, я немного далек от того, чтобы это работало. Я попытался использовать следующий код, но он продолжает печатать ошибки: result <- tryCatch({mat <- cem(treatment = "c_CLUSTER", data = df, drop = dp))}, finally = {}) - person Roberto; 25.02.2016
comment
предложенный вами код отлично работает в R: я пробовал его с RStudio, а mat - это NULL каждый раз, когда совпадение не удается. Во всяком случае, ошибки все еще печатаются в консоли моего java-приложения. Если я распечатаю исключение, это то, что я получаю rcaller.exception.ParseException: Can not handle R results due to : rcaller.exception.ParseException: Can not parse output: The generated file C:\Users\ROBERT~1\AppData\Local\Temp\Routput1530072892585177778 is empty at rcaller.RCaller.runAndReturnResult(RCaller.java:429). - person Roberto; 25.02.2016
comment
Я также использую RCaller и делаю это так: result <- suppressWarnings(tryCatch({<methodCall>}, error = function(e){-1})) и я читаю в Java переменную result и если это -1 я знаю, что случилось что-то плохое. Это самосоглашение. - person Paul; 25.02.2016
comment
RCaller не может записать NULL в файл, поэтому он остается пустым, и вы получаете ошибку. - person Paul; 25.02.2016