您的位置:首页 > 编程语言 > Python开发

python和R混合编程

2016-01-28 21:52 736 查看
python可以通过rpy2模块实现和R的混合编程,rpy2安装和python和R环境配置参考python和R混合编程

1 直接嵌入R文件

2 通过r实现在python中使用R的函数和传入参数

1 直接嵌入,在trainNet.py脚本中嵌入train.R

trainNet.py

import rpy2
import rpy2.robjects as ro
r=ro.r
r.source('train.R')
#write into txt
f=open('out.txt','w')
print >>f,r.tr
print >>f,r.vr
print >>f,"training result:"
print >>f,r.t
print >>f,r.t1
print >>f,r.t2
print >>f,"test result:"
print >>f,r.t3
f.close()


train.R

#1 train
library(nnet)
#setwd("d:")
test<-read.csv("d:/test.csv")#d:/test.csv
inputs<-test[,1:16]
targets<-class.ind(c(test[,17]))
tnet<-nnet(inputs,targets,size=16,rang=0.5,decay=5e-4,maxit=200)
test.cl <- function(true, pred) {
true <- max.col(true)
cres <- max.col(pred)
table(true, cres)
}
tr<-test.cl(targets,predict(tnet,inputs))
t<-(tr[1,1]+tr[2,2])/sum(tr)#accuracy
t1<-tr[1,1]/sum(tr[1,])#other '0' recognition rate
t2<-tr[2,2]/sum(tr[2,])#the '1'
#1 val
vinput<-read.csv("d:/ttest.csv")#测试样本
len=nrow(vinput)
vtarget<-cbind( rep(1,len),rep(0,len))
vr<-test.cl(vtarget,predict(tnet,vinput))
t3<-vr[1,2]/sum(vr)
save(tnet, file = "tnet.Rdata")
缺点是,不能改变传入的参数,R脚本已经确定了。

2 通过r实现在python中使用R的函数和传入参数

test.py

import rpy2
import rpy2.robjects as ro
r=ro.r
r['library']('nnet')
#ready data
test=r['read.csv'](filename)#filename是训练样本,维数是3,前2个数inputs,最后一个是targets
data=r['data.frame'](test)
inputs=r['cbind'](data[0],data[1])
targets=r['class.ind'](r['c'](data[2]))
#train
tnet=r['nnet'](inputs,targets,size=16,rang=0.5,decay=5e-4,maxit=200)
#print tnet
r['source']('testcl.R')
#predict--target
tr=r['test.cl'](targets,r['predict'](tnet,inputs))

print tr


testcl.R

test.cl <- function(true,pred){
true <- max.col(true)
cres <- max.col(pred)
table(true,cres)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: