我有以下函数来读取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作为String访问。 如果我创建一个如下所示的数据框,这段代码正在工作:
instance.eval("xyz <- matrix(c(10,20,3,\"A\",40,50,60),nrow=2)");
REXP x = instance.eval("df <- as.data.frame(xyz)");
我尝试将每列的数据类型转换为字符,然后检索该值,但抛出相同的异常。请帮忙。
答案 0 :(得分:1)
使用以下语法:
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());
}
}
无需将数据类型转换为字符。希望它有所帮助。