好久没更新博客了。
最近学习了一下R语言。 在计算方面速度比Java要快上许多
通过Java语言调用R语言又比较方便(我开始以为很方便)
在网上看很多人写的帖子都差不多一致。但实际里面有的问题可能会比较多。
由于我对R语言不太熟悉。过程中遇到很多问题。好在已经解决。
废话不多说了。 我贴出来做一下记录
所需Maven配置
<dependency>
<groupId>com.github.yannrichet</groupId>
<artifactId>Rsession</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.19</version>
</dependency>
1、首先你需要去R官网安装一下R语言
安装完就是这个德行。、我是MAC哈
2、然后需要在R中安装Rserve 、启动Rserve
网上的帖子都没告诉你在哪安装好嘛。我以为是CMD呢。
#安装命令
install.packages("Rserve", "Rserve_1.8-6.tgz", "http://www.rforge.net/")
#解压
library(Rserve)
#查看版本。 必须是1.8 这里需要注意。不然一会Java调用不好使
packageVersion("Rserve")
也可以在R中进行启动
使用CMD启动命令
R CMD Rserve --RS-enable-remote
启动报错,。在命令行中输入。我也不知道为啥。反正就好使了
ln -s /Library/Frameworks/R.framework/Resources/library/Rserve/libs/Rserve /Library/Frameworks/R.framework/Resources/bin/Rserve
看看是否启动成功
ps -ef|grep Rserve
出现2个证明成功
3、Java代码对接。
这里我参考了这篇文章
http://blog.fens.me/r-rserve-rsession/
这个是Git的地址
https://github.com/yannrichet/rsession
主要使用rsession来进行调用
source代表引入R文件。 里面是R文件地址。
Java代码调用R:
//生成
Rsession c = RserveSession.newInstanceTry(System.out, null);
c.eval("source('"+path+KMplot+"')");
c.end();
不知道为什么。使用Java文件引入R文件。在Java中调用不好使。
所以我想出了一个野路子。
就是。R文件中自己调用方法。
那么有人要问了。R文件中自己调用方法。参数岂不是就是固定的了。。
所以。。我用流先写了一下这个文件。 然后在执行。 这样。参数就是Java传递进去的了。
FileReader fileReader = new FileReader(path + KMplot);
List<String> strings = fileReader.readLines();
List<String> ws = new ArrayList<>();
for (int i = 0; i < strings.size(); i++) {
if((i+1) == strings.size()){
ws.add("KMplot('"+BRCA+"','"+CTNND1_15951+"')");
}else{
ws.add(strings.get(i));
}
}
FileWriter writer = new FileWriter(path + KMplot);
writer.writeLines(ws);
R代码:
setwd("/Users/jiangjiacheng/Desktop/11/zuotu02")
KMplot=function(cancer,event){
library(survival)
library(survminer)
inputFilePath<-paste(cancer,"_OS.Rdata",sep = '')
load(inputFilePath)
colnames(survdata)[1:2]<-c("time","status")
data<-survdata[,c("time","status",event)]
colnames(data)[1:3]<-c("time","status","event")
time <- data$time
status <- data$status
x<-survfit(Surv(time, status) ~ data$event, data=data)
lPSI <- paste("L-PSI (n=",x$n[1], ")", sep = '')
hPSI <- paste("H-PSI (n=", x$n[2],")", sep = '')
sdf <- survdiff(Surv(time, status) ~ data$event,data=data)
pval <- 1 - pchisq(sdf$chisq, length(sdf$n) - 1)
p<-format(pval, scientific = TRUE,digits = 3)
title=paste(event,",",cancer,"(","pvalue=",p,")",sep=" ")
outFilePath <- paste(cancer,"-",event,"-KMplot.pdf",sep = '')
pdf(file=outFilePath,width=5,height=4)
p<-ggsurvplot(x,data=data,pval=F,palette=c("blue","red"),ggtheme = theme_bw(),
censor.shape="|", censor.size = 1.5, xlab="Time (days)",ylab="Survival",legend.labs =c(lPSI,hPSI),
legend=c(0.8,0.8),break.time.by = 1000,break.y.by = 0.25,legend.title = "PSI level", title=title)
print(p)
dev.off()
return(outFilePath)
}
KMplot('BLCA','C1orf159_19')
调用结束!哦也!