【问题标题】:Using subset from arules package in rpy2在 rpy2 中使用 arules 包中的子集
【发布时间】:2015-11-10 13:57:12
【问题描述】:

使用包 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 可以使用这个子集函数吗?

【问题讨论】:

  • 如果示例是独立的,则更容易(例如这里的对象rules 究竟是由什么组成的)。 R 的subset 工作正常,但您可能会发现dplyr 的接口很有趣:rpy2.readthedocs.org/en/version_2.7.x/…(使用filter 而不是subset
  • @lgautier 我相信 arules 包会覆盖 R 子集中的子集,因此使用该语法。我会看到 dplyr 的过滤器。谢谢。

标签: python r rpy2 apriori arules


【解决方案1】:

如果subset 在R 包arules 中(重新)定义,则从importr 获得的对象arules 将包含它。在你的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多