我正在做一个函数给出一个事务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"’
答案 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%
的结果不是矩阵,而是矢量。