我一直在https://rpy2.readthedocs.io/en/version_2.8.x/robjects_oop.html的rpy2文档中遵循有关使用R的OOPS的说明。我正在尝试创建一个Python类,以在R包randomForestSRC中调用函数rfsrc。
在什么条件下可以工作? 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)
答案 0 :(得分:1)
有几个问题。我选择了可能是其他所有产品的起源。
rpy2是否有固定的软件包列表供您访问,如果可以,此列表上是否包含randomForestSRC?
rpy2
仅能使用R安装中可用的R软件包。该文档包含有关从Python安装R软件包的信息(另请注意rpy2-2.9.x文档的URL):https://rpy2.github.io/doc/v2.9.x/html/robjects_rpackages.html#installing-removing-r-packages
编辑:
现在已对问题进行了编辑,以重点关注错误消息no generic function found for 'rfsrc'
。该错误来自R,因为未找到称为“ rfsrc”的泛型函数。
我认为rfsrc
只是一个常规R函数(不是泛型,请参见https://github.com/cran/randomForestSRC/blob/master/R/rfsrc.R)。另外,我不是软件包randomForest
经常使用S4,而您尝试使用的rpy2功能是专门为R的S4 OOP系统设计的。