使用rpy2从Python调用自定义函数

时间:2013-03-14 20:41:48

标签: python r rpy2

有没有办法调用文件中定义的函数,如myfunc.r

---------------myfunc.r --------------
myfunc = function(){
  return(c(1,2,3,4,5,6,7,8,9,10))
}

getname = function(){
  return("chart title")
}

---- Python 
   How to call getname() here ?

非常感谢任何帮助?

3 个答案:

答案 0 :(得分:14)

rpy2中的功能应该有助于使这种功能比将对象转储到全局工作区更清晰。

from rpy2.robjects.packages import STAP
# if rpy2 < 2.6.1 do:
# from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage
# STAP = SignatureTranslatedAnonymousPackage
with open('myfunc.r', 'r') as f:
    string = f.read()
myfunc = STAP(string, "myfunc")

现在可以使用myfunc.myfuncmyfunc.getname访问R文件中的对象。

查看有关importing arbitrary R code as a package(较早的文档here)的文档。

答案 1 :(得分:8)

你可以这样做(这里是python代码)

import rpy2.robjects as robjects
robjects.r('''
       source('myfunc.r')
''')

 r_getname = robjects.globalenv['getname']

然后你称之为

r_getname()

答案 2 :(得分:1)

我建议使用 user3282437 建议的here

import rpy2.robjects as robjects
r_source = robjects.r['source']
r_source('/path_to_file/myfunc.R')
r_getname = robjects.globalenv['getname']

我不确定这是一个全球性问题,但在我的Windows机器上直接调用 agstudy 建议:

import rpy2.robjects as robjects
robjects.r('source("some_file.R")')

导致python崩溃。