2017-12-04 4 views
1

Ich habe eine Frage bezüglich der Effizienz meines Codes. Ich habe 9 Datenrahmen in meiner Umgebung und für jeden von ihnen muss ich die gleichen Schritte ausführen. Die Schritte und der Code (nur für zwei der Datenrahmen dargestellt):Wie kann ich meinen Code effizienter machen in R - Es ist zu wiederholen

CDL <- aggregate(A$Frequency, by=list(Category=A$Words), FUN=sum) 
wordcloud(words = CDL$Category, freq = CDL$x, min.freq = 2, 
     max.words=250, random.order=FALSE, rot.per=0.35, 
     colors=brewer.pal(6, "Dark2")) 

Ltd <- aggregate(B$Frequency, by=list(Category=B$Words), FUN=sum) 
wordcloud(words = Ltd$Category, freq = Ltd$x, min.freq = 2, 
     max.words=250, random.order=FALSE, rot.per=0.35, 
     colors=brewer.pal(6, "Dark2")) 

ich zuerst alle die gleichen Worte zusammenfassen, deren Frequenzen summieren und dann eine Welt Wolke basierend auf den aggregierten Ergebnissen erstellen.

Die Objektnamen in der Umgebung beginnen von "A" und gehen bis "I". Die Variable 'Häufigkeit' ist nur eine Zahl, die Variable 'Wörter' enthält eine Liste der Wörter.

Für die Wordcloud: Die Variable ‚Kategorie‘ genommen, um die einzigartigen Wörter enthält der ‚Wörter‘ Variable und ‚x‘ ist die aggregierte Summe der Frequenzen von ‚Frequency‘ genommen

irgendeinen Weg gibt es, ich könnte dasselbe tun, aber meinen Code nicht wiederholen? Danke

Antwort

2

Wenn ich mich nicht täusche, sollte eine Funktion und Schleife es funktionieren!

word_cloud <- function(df) { 
    temp <- aggregate(df[,"Frequency"], by=list(Category=df[,"Words"]), FUN=sum) 
    result <- wordcloud(words = temp[,"Category"], 
    freq = temp[,"x"], 
    min.freq = 2, 
    max.words=250, 
    random.order=FALSE, 
    rot.per=0.35, 
    colors=brewer.pal(6, "Dark2")) 
    return(result) 
} 

input_list <- list(A,B,C,D,E,F,G,H,I) 

for (df_inp in input_list) { 
    word_cloud(df_inp) 
} 

Ich weiß nicht, den Ausgabemodus von Wordcloud(), so dass Sie die Ergebnisse in einer Liste oder zeichnen sie speichern möchten! Ich hoffe das hilft!

+1

Die Schleife sollte besser mit der 'apply'-Familie statt einer' for'-Schleife gemacht werden: 'output_list <- lapply (input_list, word_cloud)' – LAP

+0

Die Ausgabe der Weltwolke zeigt nur das Bild erscheint, auf der Oberseite von dem Bild heißt es 'R Graphics: Device 2 (Active)'. Dein Code hat den Job gemacht, das einzige Problem ist, dass jedes Bild erscheint und dann das nächste das vorherige Bild übernimmt, es gibt mir nicht genug Zeit, um das Bild zu speichern, bevor das nächste angezeigt wird. Normalerweise muss ich auf Datei klicken, um das Bild zu speichern. – Syed

+0

Man könnte den Namen des Datenrahmens verwenden, um vor dem Erzeugen der Grafik eine Ausgabegrafikdatei mit 'png()' einzurichten, und 'dev.off()' danach, um die Datei zu schließen. –

Verwandte Themen