13

有没有办法调用文件中定义的函数说 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 ?

任何帮助将不胜感激 ?

4

3 回答 3

21

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.myfunc和访问 R 文件中的对象myfunc.getname

查看有关将任意 R 代码作为包导入的文档。

于 2013-03-15T14:06:54.420 回答
10

You can do something like this ( python code here)

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

 r_getname = robjects.globalenv['getname']

then you call it

r_getname()
于 2013-03-14T20:50:39.763 回答
2

我建议使用user3282437在这里建议的内容:

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崩溃。

于 2014-06-01T14:23:42.990 回答