arles包中的R,有些方法不行

时间:2015-07-17 01:45:17

标签: r transactions rules arules

我正在做一个函数给出一个事务x和一组规则y,如果x作为一个整体是y的一个子集然后我感兴趣它因为我可以根据规则做一个推荐(我正在使用“Groceries”数据集)我试图使用%ain%来做这件事,但是看起来RStudio似乎没有认出它,我会留下你的代码和它抛出的错误。

install.packages("arules") 
library(arules) 
myfunction <- function(t,w,z){ 
  lav <- which (t %ain% w,arr.ind=TRUE) 
  lav <- z[lav,] 
  lav <- unique(lav) 
  return (lav) 
} 
data("Groceries") 
x <- list(c("pip fruit","root vegetables","yogurt","soda","fruit/vegetable juice")) 
reglas = apriori(Groceries, parameter=list(supp=0.0006, conf=0.98)) 
t <- as(x,"transactions") 
z <- slot(reglas,"rhs") 
w <- slot(reglas,"lhs") 
inspect(myfunction(t,w,z))

这是错误:

error in evaluating the argument 'x' in selecting a method for function  'which': Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘%ain%’ for signature ‘"transactions", "itemMatrix"’

1 个答案:

答案 0 :(得分:1)

错误说明了一切。

  在选择函数'的方法时评估参数'x'时出错

?'%ain%'%ain%定义为signature(x = "itemMatrix", table = "character")

在您的情况下,您的x有“交易”类,而不是“itemMatrix”。你的表w有“itemMatrix”类,而不是“character”。

如果您想查看w中的任何项目集是否包含t('pip fruit'等)中的任何项目,您必须

w %ain% t # not t %ain% w

其中t是一个CHARACTER向量(即示例中为x[[1]]),因此您必须编写一些从“transations”类中提取字符向量的内容。

如果相反的方向实际上是你想要的(t %ain% w),你将不得不以某种方式强迫你的t(类“交易”)进入itemMatrix,并强迫你的w (将“itemMatrix”类)转换为字符向量。

另外,我认为你可能会误解%ain%的作用:它

  

返回一个逻辑向量,指示'x'中的行(项集)是否包含'table'中指定的项目的任何

因此arr.ind中的which可能在此处无效 - %ain%的结果不是矩阵,而是矢量。