java - 异常:"attempt to access org.rosuda.REngine.REXPGenericVector as String"

标签 java r exception eval

我有以下函数来读取 csv(有 18000 行和 21 列)并在 java 控制台中显示其内容。

public void rFun() {

    Rsession instance = RConnect.getInstance();

    instance.eval("load(\".RData\")");

    instance.eval("g <- read.csv(\"Book2.csv\")");

    REXP x = instance.eval("hh <- head(g,2)");

    REXP x1 = instance.eval("nrow(hh)");
    REXP x2 = instance.eval("ncol(hh)");
    try {


        int i = 0;  
        for(int j=0; j<x1.asInteger(); j++){
                for(int k=0; k<x2.asInteger(); k++){
            System.out.println("Element ["+(j+1)+"]["+(k+1)+"] = "+x.asStrings()[i]);
                i++;
                }
            }

    } catch (REXPMismatchException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

但是当我执行这个函数时,我得到了这个异常: 尝试以字符串形式访问 org.rosuda.REngine.REXPGenericVector。 如果我创建如下所示的数据框,这段代码将起作用:

instance.eval("xyz <- matrix(c(10,20,3,\"A\",40,50,60),nrow=2)");             
REXP x = instance.eval("df <- as.data.frame(xyz)");

我尝试将每列的数据类型转换为字符,然后检索值,但抛出了相同的异常。请帮忙。

最佳答案

使用以下语法:

for(int i=1; i<=x1.asInteger(); i++){
    for(int j=1; j<=x2.asInteger(); j++){
                     REXP cls1 = instance.eval("c1 <- h["+i+","+j+"]");
                     System.out.println(cls1.asString());
    }
}

无需将数据类型转换为字符。希望对您有所帮助。

关于java - 异常:"attempt to access org.rosuda.REngine.REXPGenericVector as String",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24926348/

相关文章:

使用 lm() 和 predict() 进行滚动回归和预测

C# - 线程中止异常(Thread Abort Exception)重新抛出自身

java - HasA关系最好的实现方式?

java - 如何在java中检查数字是否为八进制且最多包含6位数字

r - 如何使用 dplyr 或其他包合并两个数据帧?

java - GWT 中的多个 javascript 异常处理

java - IllegalStateException 错误

java - libgdx ScissorStack 未按预期工作

java - sheet.getLastRowNum() 函数在 Apache POI 3.9 中给出无效计数

r - 无法将此 excel 文件导入 R