REXP as List 不 return 输出
REXP as List does not return the output
我有一个 java 代码,我在 java 中使用 Rserve 运行 我的 R 代码。这是我的代码的一部分:
RConnection c = new RConnection("localhost", 6311);
c.eval("library(e1071)");
c.eval("data(HouseVotes84, package = 'mlbench')";
c.eval("model <- naiveBayes(Class ~ ., data = HouseVotes84)")
REXP t = c.eval("NBC <- model$tables");
List<Double> NBCList = new ArrayList<Double>();
t.asList().add(NBCList);
System.out.println(NBCList);
问题是它returns以下内容:
[]
正确的输出(不使用 Rserve - 直接在 R 会话上 运行ning)应该是:
$V1
V1
Y n y
democrat 0.3953488 0.6046512
republican 0.8121212 0.1878788
$V2
V2
Y n y
democrat 0.4979079 0.5020921
republican 0.4932432 0.5067568
请注意您有一些拼写错误,请在您的 IDE 中检查,此外您没有将数据从 R 正确传递到 Java。
使用方法请看下面代码,此代码仅通过
NBC$V1[1]
NBC 的元素到 Java,你必须做很多工作才能将东西传递给 java,因为 R 有不同的类型Java。
请参阅以下示例,注意我还插入了代码,告诉您库是否已正确安装 Java 要使用:
import java.io.File;
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
public class RunDavid {
public static void main (String args []) {
Rengine re = new Rengine (new String [] {"--vanilla"}, false, null);
System.out.println("R_HOME =" + System.getenv("R_HOME"));
String path =System.getenv("R_HOME") + "\library" ;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
}
re.eval("library(e1071)");
re.eval("data(HouseVotes84, package = 'mlbench'))");
re.eval("model <- naiveBayes(Class ~ ., data = HouseVotes84)");
re.eval("NBC <- model$tables");
REXP t = re.eval("NBC$V1[1]");
System.out.println(t.asDouble());
}}
请告诉我这是否适合你:)
我有一个 java 代码,我在 java 中使用 Rserve 运行 我的 R 代码。这是我的代码的一部分:
RConnection c = new RConnection("localhost", 6311);
c.eval("library(e1071)");
c.eval("data(HouseVotes84, package = 'mlbench')";
c.eval("model <- naiveBayes(Class ~ ., data = HouseVotes84)")
REXP t = c.eval("NBC <- model$tables");
List<Double> NBCList = new ArrayList<Double>();
t.asList().add(NBCList);
System.out.println(NBCList);
问题是它returns以下内容:
[]
正确的输出(不使用 Rserve - 直接在 R 会话上 运行ning)应该是:
$V1
V1
Y n y
democrat 0.3953488 0.6046512
republican 0.8121212 0.1878788
$V2
V2
Y n y
democrat 0.4979079 0.5020921
republican 0.4932432 0.5067568
请注意您有一些拼写错误,请在您的 IDE 中检查,此外您没有将数据从 R 正确传递到 Java。
使用方法请看下面代码,此代码仅通过
NBC$V1[1]
NBC 的元素到 Java,你必须做很多工作才能将东西传递给 java,因为 R 有不同的类型Java。
请参阅以下示例,注意我还插入了代码,告诉您库是否已正确安装 Java 要使用:
import java.io.File;
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
public class RunDavid {
public static void main (String args []) {
Rengine re = new Rengine (new String [] {"--vanilla"}, false, null);
System.out.println("R_HOME =" + System.getenv("R_HOME"));
String path =System.getenv("R_HOME") + "\library" ;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
}
re.eval("library(e1071)");
re.eval("data(HouseVotes84, package = 'mlbench'))");
re.eval("model <- naiveBayes(Class ~ ., data = HouseVotes84)");
re.eval("NBC <- model$tables");
REXP t = re.eval("NBC$V1[1]");
System.out.println(t.asDouble());
}}
请告诉我这是否适合你:)