在 rpy2 中使用 arules 包中的子集

Using subset from arules package in rpy2

使用 arules 包中的先验算法很容易:

import rpy2.interactive as r
arules = r.packages.importr("arules")
from rpy2.robjects.vectors import ListVector

od = OrderedDict()
od["supp"] = 0.0005
od["conf"] = 0.7
od["target"] = 'rules'

result = ListVector(od)

my_rules = arules.apriori(dataset, parameter=result)

但是,先验子集在子集参数中使用不同的格式:

rules.sub <- subset(rules, subset = rhs %in% "marital-status=Never-married" & lift > 2)

rpy2可以使用这个子集函数吗?

如果 subset 在 R 包 arules 中被(重新)定义,从 importr 获得的对象 arules 将包含它。在您的 python 代码中,这将类似于 arules.subset.

参数 subset 的情况略有不同,因为它是一个 R 表达式。可以有几种方法来解决这个问题。其中之一是将其包装在一个特别的 R 函数中。

from rpy2.robjects import r
def mysubset(rules, subset_str):
    return r("function(rules) { arules::subset(rules, subset = %s) }" % \
             subset_str)

rules_sub = mysubset(rules,
                     "rhs %in% "marital-status=Never-married" & lift > 2)