在rpy2中使用arules包中的子集

时间:2015-11-10 13:57:13

标签: python r rpy2 apriori arules

它易于使用来自包arules的apriori算法:

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)

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

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

可以将此子集函数与rpy2?

一起使用

1 个答案:

答案 0 :(得分:0)

如果在{R}包subset中(重新)定义了arules,则从arules获取的对象importr将包含它。在你的python代码中,这看起来像arules.subset

参数subset是一个略有不同的故事,因为它是一个R表达式。有几种方法可以解决这个问题。其中之一是将其包装在ad-hoc 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)