项目中使用 com.github.rcaller.rstuff.RCaller 调用 R 程序,对于卡方值的计算,我们使用了下面的程序:
RCaller caller = new RCallerTemplate() {
@Override
public void addRCode(RCode code) {
code.addRCode("data<-read.csv(\"C:/Users/Lenovo/Desktop/Matrix.csv\",header = T,sep = \"\")");
code.addRCode("library(epicalc)");
code.addRCode("ret<-cc(data$X2dm.0.2.pac,data$X2dm.0.2.notpac)");
}
}.createRCaller();
caller.runAndReturnResult("ret");
但是始终找不到一个合适的RCaller API 可以拿到 ret 所代表的文本,其文本如下:
后来希望在 R 程序里直接将 ret 结果写到文件里,但是尝试了R 的 write.table 或者 write.csv 都没办法写出来。
几经google,才发现sink() 函数可以的:
RCaller caller = new RCallerTemplate() {
@Override
public void addRCode(RCode code) {
code.addRCode("data<-read.csv(\"C:/Users/Lenovo/Desktop/Matrix.csv\",header = T,sep = \"\")");
code.addRCode("library(epicalc)");
code.addRCode("ret<-cc(data$X2dm.0.2.pac,data$X2dm.0.2.notpac)");
code.addRCode("sink(\"C:/Users/Lenovo/Desktop/output3.txt\")");
code.addRCode("ret");
code.addRCode("sink()");
}
}.createRCaller();
caller.runOnly();
奇怪的是,我在 RGui 里面通过 source("C:\\Users\\Lenovo\\Desktop\\R1206.R") 调用等价的 R 程序,报了一个 warning:
ret 的文本结果也没有写到文件里,不知道为什么。