import java.io.IOException;
import java.lang.Runtime;
import rcaller.RCaller;
import rcaller.RCode;
public class SurvivalAnalysis {
public static void main(String[] args) throws IOException{
RCode code = new RCode();
RCaller caller = new RCaller();
caller.setRscriptExecutable("path\Rscript.exe");
String path="cmd /c start path\\SAbatch.bat";
Runtime rn=Runtime.getRuntime();
Process pr=rn.exec(path);
Runtime.getRuntime().exec("cmd /c path/SurvivalAnalysis.r");
code.addRCode("require(survival)");
code.addRCode("require(flexsurv)");
code.addRCode("DataTest <- read.csv('C:path/data.csv',header=TRUE, sep=',')");
code.addRCode("TestModelF_W <- flexsurvreg(Surv(time,death,type='right') ~ timeZone1, data = DataTest, dist = 'weibull')");
caller.runAndReturnResult("summary(TestModelF_W)");
caller.setRCode(code);
}
}
我正在尝试使用 R 包 flexsurvreg 对 .CSV 数据文件执行生存分析。我的父代码在 Java 中,所以我从 java 调用 R。我正在使用 RCaller 包来执行此操作,基于此SO 帖子。
运行代码时,我收到以下错误消息:
[Fatal Error] Routput3149779333722388628:1:1: Premature end of file.
packageExist<-require(Runiversal)
if(!packageExist){
install.packages("Runiversal", repos=" http://cran.r-project.org")
}
packageExist<-require(Runiversal)
if(!packageExist){
install.packages("Runiversal", repos=" http://cran.r-project.org")
}
cat(makexml(obj=summary(TestModelF_W), name="summary(TestModelF_W)"),
file="C:/Users/User/AppData/Local/Temp/Routput3149779333722388628")
Exception in thread "main" rcaller.exception.RCallerExecutionException:
Can not handle R results due to :
rcaller.exception.RCallerParseException: Can not parse the R output:
org.xml.sax.SAXParseException; systemId: file:/C:/Users/Chaitu/AppData/Local/Temp/Routput3149779333722388628; lineNumber: 1; columnNumber: 1; Premature end of file.
at rcaller.RCaller.runAndReturnResult(RCaller.java:402)
at SurvivalAnalysis.main(SurvivalAnalysis.java:22)
为了调试,我尝试调用创建 R 脚本并直接从 Java 调用,但这似乎有同样的问题。RCaller 文档对此没有任何线索。
caller.R_source(path/SurvivalAnalysis.r");
caller.runOnly();