Вызов пользовательских функций из Python с использованием 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 ответа

В 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")

Теперь к объектам в файле R можно получить доступ myfunc.myfunc а также myfunc.getname,

Проверьте документацию об импорте произвольного кода R в виде пакета (более старый документ здесь).

Вы можете сделать что-то вроде этого (код Python здесь)

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

 r_getname = robjects.globalenv['getname']

тогда ты называешь это

r_getname()

Я бы предложил использовать то, что предложил здесь 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")')

приводит к краху питона.

Другие вопросы по тегам