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%
的结果不是矩阵而是向量。
我正在做一个给定交易 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%
的结果不是矩阵而是向量。