将绘图从R流式传输到Java,而不保存绘图

将绘图从R流式传输到Java,而不保存绘图,java,r,graphics,stream,rcaller,Java,R,Graphics,Stream,Rcaller,我正在使用Vaadin框架制作一个从浏览器运行R脚本的程序。一个特点应该是能够绘制绘图。这本身并不十分困难,有很多方法可以通过Rcaller实现。然而,据我所见,所有这些方法都涉及到将生成的绘图从R保存到文件系统,然后用Java显示它 这是最不方便的,需要花费大量的时间和资源。我想找到一种方法,将R中的绘图作为流,并将其定向到Java,而不必在两者之间保存任何内容 这有可能吗 我查找了一个函数“grid.cap()”。它获取当前显示的绘图的快照,并以矩阵形式返回颜色。然后可以将这些值转换为RGB

我正在使用Vaadin框架制作一个从浏览器运行R脚本的程序。一个特点应该是能够绘制绘图。这本身并不十分困难,有很多方法可以通过Rcaller实现。然而,据我所见,所有这些方法都涉及到将生成的绘图从R保存到文件系统,然后用Java显示它

这是最不方便的,需要花费大量的时间和资源。我想找到一种方法,将R中的绘图作为流,并将其定向到Java,而不必在两者之间保存任何内容

这有可能吗


我查找了一个函数“grid.cap()”。它获取当前显示的绘图的快照,并以矩阵形式返回颜色。然后可以将这些值转换为RGB值。是否可以流式传输这些值,而不是绘图本身?这种方法至少有一个问题,就是速度太慢。另外,我非常怀疑返回的是什么,因为它取决于显示设备的状态。

似乎无法使用grid.cap()完成,无论如何,这个问题可能是通过一些配置处理的。我创建了这样一个测试文件:

    RCaller caller = new RCaller();
    RCode code = new RCode();
    caller.setRscriptExecutable("C:\\Program Files\\R\\R-3.0.2\\bin\\Rscript.exe");
    code.R_require("grid");
    code.addRCode("dev.new(width=.5, height=.5)");
    code.addRCode("grid.rect()");
    code.addRCode("grid.text(\"hi\")");
    code.addRCode("cap <- grid.cap()");
    code.addRCode("returns <- list(cap=cap)");
    code.addRCode("dev.off()");
    caller.setRCode(code);
    caller.runAndReturnResult("returns");
    int[] dims = caller.getParser().getDimensions("cap");
    System.out.println("Names: " + caller.getParser().getNames());
    System.out.println("Returned matrix dimensions: "+dims[0]+" - "+dims[1]);
手动运行生成的脚本会产生以下结果:

在grid.Call(L_cap)中:光栅捕获不可用于此设备

Rscript无法检测用于打印的正确设备,但是,生成的RCaller脚本正确运行,并在RGui中直接运行时生成预期输出

> dim(returns$cap)
[1]  47 116
> head(returns$cap)
 [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]     [,10]   
 [1,] "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67"
 [2,] "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67"
在我看来,如果我错了,请原谅我,问题是找到一个图形设备或当前运行Rscript的设备之一的配置设置

> dim(returns$cap)
[1]  47 116
> head(returns$cap)
 [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]     [,10]   
 [1,] "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67"
 [2,] "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67" "gray67"