r语言调用python_python3调用R语言干货

1. 安装库rpy2

1. 下载与本地对应python版本模块,pip install rpy2是安装不上的

下载地址是:http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2 这是python下包的专用地址

需要下载版本和平台都相对应的whl包,我下的是rpy2-2.9.4-cp36-cp36m-win32.whl

pip install rpy2-2.9.4-cp36-cp36m-win32.whl安装即可。

2. 安装broom --》R语言的一个库--》与R脚本有关,可以忽略

install.packages('broom')

3. 写R脚本

library(broom)

test<-function() {#x <- c(1:1200000)

#y <- c(1:1200000)

x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)

y<- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)

relation<- lm(y ~x)

data<-summary(relation)

data_dict<-c()

newData<-c(data)

data_dict["residuals"] <- newData["residuals"]

data_dict["coefficients"] = newData["coefficients"]

data_dict["aliased"] = newData["aliased"]

data_dict["sigma"] = newData["sigma"]

data_dict["df"] = newData["df"]

data_dict["r.squared"] = newData["r.squared"]

data_dict["adj.r.squared"] = newData["adj.r.squared"]

data_dict["fstatistic"] = newData["fstatistic"]

data_dict["cov.unscaled"] = newData["cov.unscaled"]

data_dict["p.value"] = c(broom::glance(data))["p.value"]return(data_dict)

}#result <- test()#print(result)

4. 写python脚本

报错: RuntimeError: R_USER not defined.

解决方案,各种搜索都是环境变量的问题,于是我各种加

981603-20190702175034383-537607780.png 还tm不行..........................................又懒得重启

stackflow找到答案

os模块的运用,直接看脚本

importos

os.environ['R_HOME'] = r'C:\Program Files\R\R-3.6.0'os.environ['R_USER'] = r'C:\python3.6.3\Lib\site-packages\rpy2' #path depe

importrpy2.robjects as robjects # ----------------------------------------------> 一定要注意这句,不能放到最上面,因为要先添加环境变量,才能找到这个rpy2。一定要注意

robjects.r.source(r'C:\code\r_test\test_one\test.R')

a= robjects.r('test()')print(type(a))#print(list(a))

from pandas importDataFrameprint(a[0])print(a[0][0])

981603-20190702180947055-1468442710.png

5. python传值给R脚本,如何实现, 形参方法1

R脚本: 这个脚本的关键在于如何将list转换为c

library(broom)

test<-function(list_data) {#print(list_data)

#print(class(list_data))

#r语言list 转换成 vector: v = as.vector(unlist(你的list))

x = c(as.vector(unlist(list_data['x'])))

y= c(as.vector(unlist(list_data['y'])))

relation<- lm(y ~x)

data<-summary(relation)print(data)return(0)

}

python脚本

importos

os.environ['R_HOME'] = r'C:\Program Files\R\R-3.6.0'os.environ['R_USER'] = r'C:\python3.6.3\Lib\site-packages\rpy2' #path depe

from pandas importDataFrame as dfimportrpy2.robjects as robjectsimporttime

robjects.r.source(r'C:\code\r_test\test_one\test.R')

time1=time.time()y=robjects.ListVector({"x":[1, 2, 3],"y":[1, 2, 3], # 这里可以给float

})

a= robjects.r["test"](y)

981603-20190703152856147-1979738445.png

6. python传值给R脚本,如何实现, 形参方法2:类似python的args

R语言脚本

library(broom)

test<-function(...) {

list_data<- list(...) #类似python的args,可以传递多个参数

print(list_data)print(class(list_data))

x= c(as.vector(unlist(list_data[1]))) #注意R是从1开始的

y = c(as.vector(unlist(list_data[2])))print(x)print(y)

relation<- lm(y ~x)

data<-summary(relation)print(data)return(0)

}

python语言

importos

os.environ['R_HOME'] = r'C:\Program Files\R\R-3.6.0'os.environ['R_USER'] = r'C:\python3.6.3\Lib\site-packages\rpy2' #path depe

from pandas importDataFrame as dfimportrpy2.robjects as robjectsimporttime

robjects.r.source(r'C:\code\r_test\test_one\test.R')

x = robjects.IntVector([151, 174, 138, 186, 128, 136, 179, 163, 152, 131])

y= robjects.IntVector([63, 81, 56, 91, 47, 57, 76, 72, 62, 48])

a= robjects.r["test"](x, y)

981603-20190703153452065-572106824.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值