在JavaRCaller中调用R

在JavaRCaller中调用R,java,r,cluster-analysis,rcaller,Java,R,Cluster Analysis,Rcaller,我正试图通过使用R调用者在java中使用R实现集群。我正在尝试运行集群验证的示例代码,我发现大多数用户都面临一个常见错误:文件过早结束 package test; import rcaller.RCaller; import java.io.File; import java.lang.*; import java.util.*; import java.awt.image.DataBuffer; public class test3 { public static void main

我正试图通过使用R调用者在java中使用R实现集群。我正在尝试运行集群验证的示例代码,我发现大多数用户都面临一个常见错误:文件过早结束

package test;
import rcaller.RCaller;
import java.io.File;
import java.lang.*;
import java.util.*;
import java.awt.image.DataBuffer;

public class test3 {
    public static void main(String[] args) {
        new test3();
    }

    public test3()
    {

        try{

            RCaller caller = new RCaller();
            caller.cleanRCode();

            caller.setRscriptExecutable("C:/Program Files/R/R-2.15.1/bin/x64/Rscript");
            caller.cleanRCode();

            caller.addRCode("library(clvalid)");
            caller.addRCode("data(mouse)");
            caller.addRCode("express <- mouse [,c(M1,M2,M3,NC1,NC2,NC3)]");
            caller.addRCode("rownames (express) <- mouse$ID ");
            caller.addRCode("intern <- clValid(express, 2:6 , clMethods = c( hierarchical,kmeans,diana,clara,model) ,validation = internal)");
            caller.addRCode("b <- summary(intern) ");
            caller.runAndReturnResult("b");
        }

        catch (Exception e){
            e.printStackTrace();
        }
    }
}
封装测试;
导入rcaller.rcaller;
导入java.io.File;
导入java.lang.*;
导入java.util.*;
导入java.awt.image.DataBuffer;
公共类test3{
公共静态void main(字符串[]args){
新test3();
}
公共测试3()
{
试一试{
RCaller调用者=新RCaller();
caller.cleanRCode();
setrscript可执行文件(“C:/Program Files/R/R-2.15.1/bin/x64/Rscript”);
caller.cleanRCode();
addRCode(“库(clvalid)”;
addRCode(“数据(鼠标)”;

addRCode(“express您的代码中有一些拼写错误。例如
clValid
not clValid,并且您遗漏了许多引号,例如“hierarchy”、

我认为最好将代码放在脚本中,并从java中调用它,如下所示:

Runtime.getRuntime().exec("Rscript myScript.R"); 
其中myScript.R是:

library(clValid)
data(mouse)
express <- mouse [,c('M1','M2','M3','NC1','NC2','NC3')]
rownames (express) <- mouse$ID 
intern <- clValid(express, 2:6 , clMethods = c( 'hierarchical','kmeans',
                                               'diana','clara','model') ,
                                                validation = 'internal')
b <- summary(intern) 
库(clValid)
数据(鼠标)

express为什么不使用基于Java的聚类算法,比如ELKI中的算法?我必须用Java打包R脚本。所以在R中执行聚类后,我们必须将其保存为Jar文件。感谢您的回复!!您能告诉我这个Rscript应该写入/存储在哪里吗?。我对R和Java都不熟悉为了避免路径问题,您可以在批处理文件中定义对Rscript的调用,如从java调用,当我从java调用批处理文件时,会显示错误消息“拒绝访问”。此外,我想用java打包R脚本,因此从批处理文件调用R脚本是不够的。