0

我正在做一个给定交易 x 和一组规则 y 的函数,如果 x 作为一个整体是 y 的子集,那么我对它很感兴趣,因为我可以根据规则进行推荐(我正在使用“杂货”数据集)我正在尝试使用它来执行此操作%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"’
4

1 回答 1

1

错误说明了一切。

在为函数“which”选择方法时评估参数“x”时出错:(函数(类,fdef,mtable)中的错误:无法为签名“事务”找到函数“%ain%”的继承方法, “项目矩阵”'</p>

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

在你的情况下,你x有类“交易”,而不是“项目矩阵”。你的表w有类“itemMatrix”,而不是“字符”。

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

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

CHARACTER 向量在哪里t(即x[[1]]在您的示例中),因此您必须编写一些从“transations”类中提取字符向量的东西。

如果相反的方向实际上是您想要的 ( t %ain% w),您将不得不以某种方式将您的t(class "transactions") 强制转换为 itemMatrix,并将您的w(class "itemMatrix") 强制转换为字符向量。

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

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

所以arr.indin 在which这里可能没有影响 - 结果%ain%不是矩阵而是向量。

于 2015-07-17T02:13:11.283 回答