gpt4 book ai didi

java - 在不保存绘图的情况下将绘图从 R 流式传输到 Java

转载 作者:行者123 更新时间:2023-11-30 09:08:54 25 4
gpt4 key购买 nike

我正在使用 Rcaller使用 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]);

此代码产生此输出:

Names: []
Returned matrix dimensions: 0 - 0

手动运行生成的脚本会产生这个:

In grid.Call(L_cap) : raster capture is not available for this device

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 的设备之一的配置设置。

关于java - 在不保存绘图的情况下将绘图从 R 流式传输到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com