Java调用R语言 踩坑记录

1 篇文章 0 订阅

好久没更新博客了。

最近学习了一下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语言

https://www.r-project.org/

安装完就是这个德行。、我是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')

 

调用结束!哦也!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值