使用rJava在R中显示Java控制台输出
我创建了以下Java类并将其保存为使用rJava在R中显示Java控制台输出,java,r,knitr,stdout,rjava,Java,R,Knitr,Stdout,Rjava,我创建了以下Java类并将其保存为Test.Java,然后使用javac Test.Java在命令行上编译成Test.class: 公共类测试{ 公开考试(){ } 公共双重权力(双重数字){ System.out.println(“计算…”); 返回编号*编号; } } 此外,我还创建了以下R脚本并将其保存为test.R: 库(“rJava”) .jinit(classpath=getwd()) 测试我将尝试回答我自己的问题。。。看起来RJava的人实际上提供了一个内置的解决方案(如果您阅读
Test.Java
,然后使用javac Test.Java
在命令行上编译成Test.class
:
公共类测试{
公开考试(){
}
公共双重权力(双重数字){
System.out.println(“计算…”);
返回编号*编号;
}
}
此外,我还创建了以下R脚本并将其保存为test.R
:
库(“rJava”)
.jinit(classpath=getwd())
测试我将尝试回答我自己的问题。。。看起来RJava的人实际上提供了一个内置的解决方案(如果您阅读本文,请感谢Simon Urbanek)。在Java代码方面,有LGPL许可的JRI.jar
,它随rJava一起提供(查看本地R库路径中rJava
包目录中的JRI
子目录),可以复制/提取到Java库路径中。它只有82kb,所以相当轻
JRI提供了Java中默认打印流的替换。本质上,您可以将系统输出重定向到JRI提供的RConsoleOutputStream
。我上面问题中的代码可以修改如下,以打印到R控制台,而不是标准输出
导入java.io.PrintStream;
导入org.rosuda.JRI.RConsoleOutputStream;
导入org.rosuda.JRI.Rengine;
公开课考试{
公开考试(){
重新引擎r=新的重新引擎();
RConsoleOutputStream rs=新的RConsoleOutputStream(r,0);
系统放样(新打印流(rs));
}
公共双重权力(双重数字){
System.out.println(“计算…”);
返回编号*编号;
}
}
令人沮丧的是,我(在某个时候)发现java输出绕过了R的许多工作方式。答案不多,更多的是一种预兆,“这应该很容易,但我发现不是”。
calculating...
[1] 9
## [1] 9