Я следовал инструкциям по работе с OOPS R в документации по rpy2 здесь: https://rpy2.readthedocs.io/en/version_2.8.x/robjects_oop.html. Я пытаюсь создать класс Python для вызова функции rfsrc в пакете R randomForestSRC.
При каких условиях это работает? Имеет ли rpy2 фиксированный список пакетов, к которым он имеет доступ, и если так, то есть randomForestSRC в этом списке?
Когда я запускаю приведенный ниже код из Jupyter Notebook (Python 3, R 3.5.1), я получаю ошибку: Ошибка в (function (f, signature = character (), где = topenv (parent.frame ()) ),: универсальная функция не найдена для 'rfsrc'
import rpy2.robjects.packages as rpackages
from rpy2.robjects.vectors import StrVector
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1) # select the first mirror in the list
packnames = ('randomForestSRC', 'survival', 'tidyverse', 'magrittr', 'ggRandomForests', 'mlr')
utils.install_packages(StrVector(packnames))
from rpy2.robjects.packages import importr
randomForestSRC = importr('randomForestSRC')
from rpy2.robjects.methods import RS4Auto_Type
import six
class rfsrc(six.with_metaclass(RS4Auto_Type)):
__rname__ = 'rfsrc'
__rpackagename__ = 'randomForestSRC'
Что еще мне нужно сделать, чтобы это заработало?
Я также попробовал ручной метод, как показано ниже, и получил ту же ошибку.
import rpy2.robjects as robjects
import rpy2.rinterface as rinterface
from rpy2.robjects.packages import importr
lme4 = importr("randomForestSRC")
getmethod = robjects.baseenv.get("getMethod")
StrVector = robjects.StrVector
class rfsrc(robjects.methods.RS4):
_coef = getmethod("rfsrc",
signature = StrVector(["rfsrc", ]),
where = "package:randomForestSRC")
def _call_get(self):
return self.do_slot("call")
def _call_set(self, value):
return self.do_slot("call", value)
call = property(_call_get, _call_set, None, "Get or set the RS4 slot 'call'.")
def coef(self):
""" fitted coefficients """
return self._coef(self)