在python中使用R脚本,这是为R编写的

时间:2013-12-09 14:30:18

标签: python r

朋友有一些我可能觉得有用的R脚本。但我使用Python,当他升级脚本时,我希望能够使用他的更新。

是否可以在Python中按原样嵌入R脚本?

他可能写的典型R脚本被命名为例如quadro.R并具有以下形式:

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

我可以以某种方式从python中使用参数“3”调用quadro.R并在Python中返回结果“9”吗?我在Linux系统上安装了R。

据我了解rpy/rpy2,我可以在python中使用R命令但不使用R脚本,或者我误解了什么?是否有其他方法可以在Python中使用R脚本?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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