RCaller を使用して、環境で定義されたすべての変数を処理できます。ここで、グローバル環境を使用するとします (これは、refclass または関数から変数を宣言する特別な最上位環境です)。
package org.expr.rcaller;
import java.util.ArrayList;
import org.expr.rcaller.Globals;
import org.expr.rcaller.RCaller;
import org.expr.rcaller.RCode;
import org.junit.Test;
import org.junit.Assert;
public class HandlingAllVariablesTest {
private final static double delta = 1.0 / 1000.0;
@Test
public void GetAllVariablesInEnvironmentTest() {
RCaller caller = new RCaller();
Globals.detect_current_rscript();
caller.setRscriptExecutable(Globals.Rscript_current);
RCode code = new RCode();
code.addDouble("x", 5.65);
code.addDouble("y", 8.96);
code.addRCode("result <- as.list(.GlobalEnv)");
caller.setRCode(code);
caller.runAndReturnResult("result");
ArrayList<String> names = caller.getParser().getNames();
System.out.println("Names : " + names);
System.out.println("x is " + caller.getParser().getAsDoubleArray("x")[0]);
System.out.println("y is " + caller.getParser().getAsDoubleArray("y")[0]);
Assert.assertEquals(caller.getParser().getAsDoubleArray("x")[0], 5.65, delta);
Assert.assertEquals(caller.getParser().getAsDoubleArray("y")[0], 8.96, delta);
}}
このような結果:
名前 : [x, y]
x は 5.65
y は 8.96
ここがキーポイント
code.addRCode("result <- as.list(.GlobalEnv)");
そのため、グローバル環境で定義されたすべての変数をキャプチャする変数を定義しています。as.list() 関数は、環境オブジェクトをリストに変換します。2 番目の重要なポイントは、この変数を Java に転送することです。
caller.runAndReturnResult("結果");
ブログ ページとWeb ページにアクセスすると、環境ではなく特定の変数をキャプチャする例をさらに見ることができます。