R 調用 python

來源:互聯網
上載者:User

標籤:head   分析   data   資料抓取   linux   bsp   xxxxxx   linu   blog   

  上一篇說了python使用 rpy2 調用 R,這裡介紹R如何調用python。R的強項在於統計方面,尤其是專業的統計分析,統計檢驗以及作圖功能十分強大,但是在通用性方面,就遠不如Python了,比如python可以做web,可以開發GUI,可以爬蟲,甚至可以開發遊戲,這些R其實也不是完全不行,但是在易用性方面實在是難以與Python相匹敵。所以如果要是能將R與Python相結合,充分發揮二者的優勢,那麼無疑我們會得到一個更加強大的武器。幸運的是,R 為我們提供了這麼一個工具,rPython。

  rPython就是串連R與python的一個介面。其首頁地址在:http://rpython.r-forge.r-project.org/。按照其官網的介紹,rPython就是為了能夠彌補R在某些通用性領域的不足,使用python豐富的庫來彌補這些不足之處而誕生的。關於rPython如何工作,官網上寫的很清楚了:

How does rPython work?

One of the most daunting tasks in building an interface between two languages is provide mechanisms for exchanging different data structures between them. rPython uses json:

  1. R/Python objects are dumped into json strings using their respective parsers (RJSONIO and simplejson) respectively.
  2. These strings are passed between the two languages using their string exchange mechanisms.
  3. json strings are finally reconstructed into language objects on the other side.

This simple mechanism allow R and Python exchange relatively complex data structures with ease.

翻譯過來就是,串連R與python的一個麻煩之處在於這兩種語言的不同資料類型的以及對象的傳遞。rPython使用的解決辦法是通過json作為中間對象。即將python與R的資料以及對象先轉化為json字串(python通過simplejson這個庫,R通過RJSONIO這個庫)進行傳遞,再轉化為相應語言的資料類型就可以了。

這裡需要特別提一下rPython在windows下的安裝方式。如果你使用的是linux或者mac系統,那麼安裝rPython是比較簡單的一件事情,直接使用命令install.packages("rPython")即可,但是坑爹的是,rPython在windows下沒有編譯好的包(以前如果我在windows下install.packages安裝失敗,就直接去CRAN官網找到相應的編譯好的包,然後解壓到R的library目錄下,就可以直接使用了),所以我們必須要自己編譯安裝了。最開始,我沒有找到合適的方法去安裝rPython,後來發現了rJython這個包,這個包在CRAN上有編譯好的,我成功安裝之後,發現也可以使用。額外提一句,通常我們說的Python指的是用C實現的python,即Cpython,但是還有其他語言實現的python,比如Jython就是Java實現的python,Ironpython是.Net和mono平台上的python。pypy是使用純pyhton寫的python。對此有興趣的可以自行查閱資料。因為裝不上rPython,所以我只能使用Jython,使用Jython有利有弊,利當然就是可以無縫調用java一大堆的類庫了,弊就是Jython的第三方庫相比Cpython少的可憐,好多庫都不能用,所以這也是比較蛋疼的一件事情。

  但是今天,我終於在github上面找到rPython在windows下的安裝方法了。連結在此:https://github.com/cjgb/rPython-win。大概安裝步驟如下:

  1.下載github的zip檔案

  2.下載完成之後解壓,將檔案夾重新命名為rPython

  3.在R下安裝devtools(一個包管理工具,可以從github上面下載R包),install.packages("devtools")

  4.library(devtools)

  5.開啟解壓之後的configure.win檔案,大概長下面這個樣子: 

#!/bin/sh

echo ‘PKG_LIBS=-LC:/python27/libs -lpython27‘ > src/makevars.win
echo ‘PKG_CFLAGS=-I"C:/Python27/include"‘ >> src/makevars.win

原來預設python的安裝位置為C:/python27,這裡需要將其改為你自己的電腦中python實際安裝的位置,以便於在編譯時間可以正確找到python的安裝位置。

做好之後,執行命令:install("yourpath/rPython") ,引號中的內容是你解壓rPython的位置。至此,rPython就成功安裝了。如果安裝過程中報錯,比如我的就報錯,無法下載RJSONIO,請自行安裝相應的缺少的庫。

安裝成功之後,我們就來看看怎麼使用rPython吧。

其實rPython的使用還是比較簡單的,就提供了幾個調用的介面函數。直接看代碼執行個體吧:

1 # R 調用python2 library(rPython)3 python.call("len",1:10) # 調用函數4 a <- 0:35 b <- 1:46 python.exec("def connact(a,b):return a+b") # 執行函數7 c <- python.call("connact",a,b) # 調用函數8 python.assign( "a",  "hola hola" )9 a.split <- python.method.call( "a", "split", " " ) # 對a調用split函數,使用空格分割

首先載入rPython這個庫。

python.call("len",1:3)表示調用python的len函數對1:3這個向量進行計算,其實就是計算len([1,2,3]),答案當然是3了。python.exec()可以執行一段python代碼,這裡是執行了一個python函數,我們定義了兩個變數的相加,然後使用call調用這個函數,函數的兩個參數為a,b,計算結果為c。計算可以得到c的值為c(0,1,2,3,1,2,3,4)為一個向量,其實我們可以發現,R中的向量就對應了python中的列表。然後使用 python.assign()將字串"hola hola" 賦值給變數a,然後對a調用split方法,split傳入參數為空白格,即對a按空格進行分割,得到 結果為 "hola" "hola" 這兩個字串。

其他還有一些方法的使用,大家可以自行參考CRAN上的函數協助手冊,或者直接??rPython查看協助文檔。

最後,來看如何在R中調用執行一個python檔案。

名為 python_demo.py的檔案如下:

# -*- coding:utf-8 -*-import requests‘‘‘類比登陸一個叫推酷的網站‘‘‘s = requests.session()# data為要提交的資料,可以通過firefox的httpfox捕獲data = {    ‘email‘:‘[email protected]‘,    ‘password‘:‘xxxxxxx‘,    ‘authenticity_token‘:‘ANJyaQEi/IQqiFtLFu4md41p418qigNOzgIjJMwKz9A=‘,    ‘remember‘:‘1‘}url_login = ‘http://www.tuicool.com/login‘ # 要提交資料的地址headers =  {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118Safari/537.36‘}res=s.post(url_login,data,headers = headers)r = s.get(url_login)content = r.contentwith open(‘tuiku.html‘,‘w‘) as f:    f.write(content)

上面的代碼使用requests庫類比登入了某一個網站,將返回的內容寫入html檔案。

只需要使用幾行代碼就可以從R調用執行這段python檔案。

# 使用 rPython 調用 python檔案file_name = "F:/R_work/rPython/python_demo.py"python.load(file_name) # 調用python檔案

在R中運行上面的代碼,幾秒之後,就會發現已經新增了一個html檔案。怎麼樣,是不是很酷呢?

有了rPython之後,以後像資料抓取以及大規模運算等任務就可以交給python了,得到資料之後再傳入R,然後利用R的專業的統計包進行統計分析以及作圖等。python與R的無縫結合,so cool!

R 調用 python

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.