【发布时间】:2018-11-08 02:28:15
【问题描述】:
我一直在遵循 rpy2 文档中关于使用 R 的 OOPS 的说明:https://rpy2.readthedocs.io/en/version_2.8.x/robjects_oop.html。我正在尝试创建一个 Python 类来调用 R 包 randomForestSRC 中的函数 rfsrc。
这在什么条件下有效? rpy2 是否有一个固定的软件包列表,它允许您访问,如果有,那么 randomForestSRC 是否在此列表中?
当我从 Jupyter Notebook (Python 3, R 3.5.1) 运行以下代码时,我收到错误: (function (f, signature = character(), where = 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)
【问题讨论】: