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%' の継承されたメソッドが見つかりません。 "itemMatrix"'</p>

?'%ain%'%ain%として定義されsignature(x = "itemMatrix", table = "character")ます。

あなたの場合、x「itemMatrix」ではなく「トランザクション」クラスがあります。また、テーブルwには「文字」ではなく「itemMatrix」クラスがあります。

の項目セットのいずれかに('pip fruit' など)の項目がw含まれているかどうかを確認したい場合は、次のようにする必要があります。t

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

wheretはCHARACTERベクトルです(つまりx[[1]]、あなたの例では)ので、「トランザクション」クラスから文字ベクトルを抽出するものを書く必要があります。

反対方向が実際に必要な場合 ( t %ain% w)、何らかの方法でt(クラス "トランザクション") を itemMatrix に強制し、w(クラス "itemMatrix") を文字ベクトルに強制する必要があります。

また、%ain% の機能を誤解していると思います:

'x' の行 (項目セット) に'table' で指定された項目のいずれかが含まれているかどうかを示す論理ベクトルを返します。

arr.indwhichおそらくここでは効果がありません - の結果は%ain%行列ではなくベクトルです。

于 2015-07-17T02:13:11.283 に答える