python 呼叫 R,使用rpy2

2022-07-03 13:54:11 字數 3650 閱讀 4999

python 與 r 是當今資料分析的兩大主流語言。作為乙個統計系的學生,我最早接觸的是r,後來才接觸的python。python是通用程式語言,科學計算、資料分析是其重要的組成部分,但並非全部;而r則更偏重於統計分析,畢竟r是統計學家發明的,本身就是為統計而生。python的優勢在於其全能性,幾乎所有的領域都有python的身影,而r則在統計及其相關領域非常專業。二者各有優勢。那麼這麼好的兩個東西,能不能結合到一起呢?答案是肯定的。要想實現這種功能,一般必須要提供相應的呼叫介面。rpy2這個第三方庫就提供了python呼叫r的介面。本文主要介紹rpy2的簡單使用。

常用的命令:

1. import rpy2.robjects as robjects    這個命令是匯入 r物件

2. robjects.r("r_script") 可以執行r**,比如 pi = robjects.r('pi') 就可以得到 r 中的pi(圓周率),返回的變數pi是乙個向量,或者理解為python中的列表,通過

pi[0] 就可以取出圓周率的值。

robjects.r.source('

plot_demo.r

')

plot_demo.r 內容如下:

#

r 語言測試指令碼

儲存影象

plt <- plot(x,y) #

畫散點圖

dev.off() #

關閉裝置

執行上面的**後,就可以得到一幅名為 plot.jpg的散點圖了。

a = robjects.r('

a<-c(1,2,3)')

print(a)

執行得到 [1] 1 2 3

x = robjects.r('x')

y = robjects.r('y')

print(x)

print(y)

執行得到: 

[1] 1 2 3 4

[1] 1 4 9 16

當然rpy2不僅可以將r的資料物件轉換為python的變數(或物件),還以將python的列表,字典等資料型別轉換為r的向量或資料框型別,對應的函式有 robjects.intvector(),

robjects.floatvector()等,看這些名字基本就知道幹嘛的了。舉例如下:

print(robjects.intvector([1,2,3]))

print(robjects.factorvector(['

a','

a','

b','c'

]))print(robjects.floatvector([1.2,2.3]))

print(robjects.baseenv) #

基本環境空間

print(robjects.dataframe())

得到結果如下:

[1] 1 2 3

[1] a a b c

levels: a b c

[1] 1.2 2.3

a.1l a.2l b.3l b.4l

1 1 2 3 4

最後,再來看乙個複雜一點的r**在python中的執**況。

r_script = '''

library(randomforest) # 匯入隨機森林包

## use data set iris

data = iris # 使用鳶尾花資料集

table(data$species)

## create a randomforest model to classfy the iris species

# 建立隨機森林模型給鳶尾花分類

iris.rf <- randomforest(species~., data = data, importance=t, proximity=t)

print('--------here is the random model-------')

print(iris.rf)

print('--------here is the names of model-----')

print(names(iris.rf))

confusion = iris.rf$confusion

print(confusion)

'''robjects.r(r_script)

得到結果如下:

randomforest 4.6-12

type rfnews() to see new features/changes/bug fixes.

[1] "--------here is the random model-------"

call:

randomforest(formula = species ~ ., data = data, importance = t, proximity = t)

type of random forest: classification

number of trees: 500

no. of variables tried at each split: 2

oob estimate of error rate: 4%

confusion matrix:

setosa versicolor virginica class.error

setosa 50 0 0 0.00

versicolor 0 47 3 0.06

virginica 0 3 47 0.06

[1] "--------here is the names of model-----"

[1] "call" "type" "predicted" "err.rate"

[5] "confusion" "votes" "oob.times" "classes"

[9] "importance" "importancesd" "localimportance" "proximity"

[13] "ntree" "mtry" "forest" "y"

[17] "test" "inbag" "terms"

setosa versicolor virginica class.error

setosa 50 0 0 0.00

versicolor 0 47 3 0.06

virginica 0 3 47 0.06

最後,關於python與r在jupyter notebook中互動使用的例項可以參考:

python 呼叫 R,使用rpy2

python 與 r 是當今資料分析的兩大主流語言。作為乙個統計系的學生,我最早接觸的是r,後來才接觸的python。python是通用程式語言,科學計算 資料分析是其重要的組成部分,但並非全部 而r則更偏重於統計分析,畢竟r是統計學家發明的,本身就是為統計而生。python的優勢在於其全能性,幾乎...

win下實現Python通過rpy2呼叫R

python呼叫r,解決方案是通過rpy2這個專門的模組來實現。嘗試很多方案後,下面的混搭方案成功。系統 win8 64bit python2.7.4 32bit r3.0.1 i386 w64 mingw32 i386 32bit rpy2 2.3.7 32bit pywin32 for py2....

安裝 rpy2 中的問題

參考 1 的redme.md python3中 jupyter notebook中rpy2的安裝 1 先安裝r和rstudio 2 安裝 rpy2 參考 2 通過pip install 安裝這個包,3 python 中通過 import rpy2和 import rpy2.robjects as r...