R 中的 arules 包,某些方法不起作用

arules package in R , some methods won't work

我正在做一个给定交易 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"’

错误说明了一切。

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"’

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

在您的情况下,您的 x 有 class 'transactions',而不是 'itemMatrix'。而你的 table w 有 class "itemMatrix",而不是 "character".

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

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

其中 t 是一个字符向量(即您的示例中的 x[[1]]),因此您必须编写一些从 'transations' [=52] 中提取字符向量的内容=].

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

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

returns a logical vector indicating if a row (itemset) in ‘x’ contains any of the items specified in ‘table’.

所以 which 中的 arr.ind 在这里可能没有效果 - %ain% 的结果不是矩阵而是向量。