2013-12-09 36 views
4

朋友有一些我可能會覺得有用的R腳本。但是我使用Python,當他升級腳本時,我希望能夠使用他的更新。在python中使用R腳本編寫的R

是否可以在Python中原樣嵌入R-scripts?

他可能寫的一個典型的R腳本被命名爲例如quadro.R且形式爲:

quadro <- function(x) { 
    return(x*x)} 

我可以以某種方式從蟒蛇的說法「3」叫quadro.R並得到結果「9」後面在Python?我的Linux系統上安裝了R。

據我所知,rpy/rpy2,我可以在Python中使用R命令但不使用R腳本,或者我誤解了某些東西?有沒有其他的方法可以在Python中使用R-script?

+0

[「任何爲R系統安裝的模塊都可以在Python中使用。」](http://rpy.sourceforge.net/)這將是我的問題。你可以加載你的腳本作爲模塊?在R 2.在Rpy2中? – User

回答

3

首先在python中加載整個R腳本,然後獲取任何在python中賦值和調用的R對象(函數,變量等)。

一個例子Python腳本,

from rpy2 import robjects 

robjects.r('''       
source('quadro.R') 
''')         #load the R script 

quadro = robjects.globalenv['quadro'] #assign an R function in python 
quadro(3)        #to call in python, which returns a list 
quadro(3)[0]       #to get the first element: 9 
0

Rpy2涵蓋這種使用的相當好,我想。您可以將鬆散的R腳本封裝到包中(並避免將對象存儲到R的全局環境中 - 這應該像Python中使用全局變量一樣仔細考慮)。

import rpy2.robjects.packages.SignatureTranslatedAnonymousPackage as STAP 

with open('quadro.R') as fh: 
    rcode = fh.read() 
quadro = STAP(rcode, 'quadro') 

# The function is now at 
quadro.quadro() 
# other functions or objects defined in that R script will also be there, for example 
# as quadro.foo() 

這是在rpy2 documentation