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
生成されたスクリプトを手動で実行すると、次のようになります。
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 で実行される現在のデバイスのいずれかのグラフィックス デバイスまたは構成設定を見つけることです。