Я создал следующий класс Java и сохранил его как Test.java
, затем скомпилировал в Test.class
в командной строке, используя javac Test.java
:
public class Test {
public Test() {
}
public double power(double number) {
System.out.println("calculating...");
return number * number;
}
}
Кроме того, я создал следующий Rсценария и сохранил его как test.R
:
library("rJava")
.jinit(classpath = getwd())
test <- .jnew("Test")
.jcall(test, "D", "power", 3)
Когда я выполняю его, например, используя R CMD BATCH test.R
в командной строке, я получаю следующий вывод, который я и хочу:
calculating...
[1] 9
Однако, когда я обертываю этот скрипт в документ Markdown и компилирую его, используя knitr, я теряю сообщение, которое напечатано о происходящем расчете.Например, я сохраняю следующий скрипт в test.Rmd
и компилирую его с помощью RStudio:
```{r echo=TRUE, warning=TRUE, results='show', message=TRUE}
library("rJava")
.jinit(classpath = getwd())
test <- .jnew("Test")
.jcall(test, "D", "power", 3)
```
Это возвращает только следующий вывод без сообщения:
## [1] 9
Я где-то читалпричина в том, что System.out.println
в Java записывает в stdout
, и будет ли это показано на консоли R или нет, зависит от интерпретатора.Например, выходные данные отображаются в системах Unix, но не в Windows или в knitr.
Мои вопросы:
- Верна ли приведенная выше интерпретация?
- Как можноЯ надежно фиксирую или отображаю вывод
System.out.println
в R независимо от операционной системы или интерпретатора? - Если это невозможно, как лучше разработать сообщения о состоянии текущих вычислений и прогресса в Java,такой, что R может отображать эти сообщения?Спасибо!