2017-12-08 3 views
1

ziemlich neu zu R hier. Ich suche nach Assoziationsregeln in R für bestimmte Artikel, aber ich möchte das Mindest-Support-Ziel für diese Regeln für jeden Artikel variieren (d. H. 10% der Artikel-Summe in der Transaktionsliste). Jeder Artikel hat eine unterschiedliche Anzahl an Transaktionen, daher glaube ich, dass es einen Wert hat, die Unterstützung zu variieren.R-Schleife durch Assoziationsregel-Mining (arules) mit sich ändernden Unterstützungen und Gegenstandserscheinungen

Ich habe die Support-Ziele für jedes Element in einer separaten Tabelle mit Excel berechnet.

Ich kann dies manuell schreiben den Arules-Code und manuelle Eingabe von Support Minimum und Element Erscheinungen, aber der Prozess ist langsam, vor allem mit vielen verschiedenen Elementen.

ex.

arules <- apriori(trans, parameter = list(sup = 0.001, conf = 0.25,target="rules"), 
    appearance=list(rhs= c("Apples"))) 
arules2 <- apriori(trans, parameter = list(sup = 0.002, conf = 0.25,target="rules"), 
    appearance=list(rhs= c("Oranges"))) 
combined <- c(arules,arules2) 

Wie kann ich dies tun, ein for-Schleife in R verwenden, das die Regeln für jeden angegebenen Artikel zu einem bestimmten Unterstützung Minimum berechnen, und auch diese generierten Regeln auf eine neue Variable, die die Schleife läuft jedes Mal sparen? Ich beabsichtige, diese Regeln später nach ihrem Typ zu gruppieren.

Versuchte so etwas, das zu oft durchlaufen wurde. Ich kann auch nicht einen Weg finden, um jede Schleife auf eine neue Variable zu speichern (das heißt arules1, arules2, arules3 ....)

min_supp <- c(0.001,0.002,0.003) 
names <- c("Apples","Oranges","Grape") 

for (inames in names) { 
    for (supports in min_supp) { 
     apriori(trans, parameter = list(sup = supports, conf = 0.25,target="rules"), 
     appearance=list(rhs= inames)) 
     }} 

Vielen Dank im Voraus!

Antwort

0

Betrachten Map (die vereinfachte Wrapper mapply), der elementweise durch gleiche Länge Vektoren für einen m ultiple gelten Verfahren iterieren kann. Außerdem gibt Map eine Liste der zurückgegebenen Elemente aus, die mit setNames benannt werden können. Listen werden immer bevorzugt, da Sie separate, ähnlich strukturierte Objekte vermeiden, die die globale Umgebung überfluten.

min_supp <- c(0.001,0.002,0.003) 
names <- c("Apples","Oranges","Grape") 

arules_fun <- function(n, s) apriori(trans, parameter = list(sup = s, conf = 0.25, target="rules"), 
            appearance=list(rhs= n)) 

# PROCESS FUNCTION ELEMENTWISE 
arules_list <- Map(arules_fun, names, min_supp)  
# NAME LIST ITEMS 
arules_list <- setNames(arules_list, paste0("arules", 1:length(arules_list))) 

arules_list$arules1 
arules_list$arules2 
arules_list$arules3 
... 
+0

Arbeitete wie ein Charme! Danke, dass du mir ein paar neue Dinge beigebracht hast. – nawklea

+0

Ausgezeichnet! Bitte schön. Glückliche Kodierung! – Parfait

+0

Hi wieder @Parfait, gibt es eine Schleife oder Funktion, die es mir erlaubt, alle arules_list $ arules1, arules_list $ arules2 .. Elemente gleichzeitig aufzurufen. Ich möchte sie alle mit dem c kombinieren (arules_list $ arules1, arules_list $ arules2). Versuchte Test <- Reduce (Zusammenführen, arules_list) aber erhalten: Fehler in as.data.frame.default (x): kann Klasse "Struktur (" Regeln ", Paket =" Arules ")" nicht zu einer Daten zwingen .frame – nawklea

Verwandte Themen