Korpushäufigkeitsmaße Sitemap Übungsaufgaben zu Häufigkeitsmaßen

Berechnung von Häufigkeitsmaßen mit R

Die vorgestellten Häufigkeitsmaße kann man anhand der angegebenen Formeln mit einem geeigneten Desktop- oder Taschenrechner berechnen. Auch die Software R kann man als Taschenrechner verwenden, aber mit R kann man auch viel mehr, wie wir sehen werden.

Einstieg in R

Anders als DWDS ist R keine Internet-Anwendung, sondern man muss es herunterladen und auf einen Computer installieren, was i.d.R. problemlos ist. (R ist sogenannte „freie“ Software, d.h. nicht nur kostenlos, sondern man kann auch den gesamten Quellcode ansehen und ändern und die Änderungen auch anderen Nutzern zur Verfügung stellen.)

Die eingebaute Benutzerschnittstelle von R ist eine einfache Kommandozeile, in die man Daten und Befehle eingibt (indem man sie eintippt oder auch per Copy-&-Paste). Klickt man unter MS-Windows oder macOS auf das R-Icon am Desktop oder ruft R z.B. vom Start-Menü auf, öffnet sich ein Fenster, das die R-Konsole (die Kommandozeile) enthält:

Unter Linux gibt man einfach den Programmnamen "R" in die Shell (die Linux-Kommandozeile) ein:

N.B.: Wenn die Sprache in Ihrem Betriebssystem auf Deutsch eingestellt ist, sollten die Meldungen, die R ausgibt, auch auf deutsch sein. Dennoch müssen Sie numerische Eingaben in R nach der englischen Schreibweise machen, siehe gleich unten.

R als Taschenrechner

Um R als Taschenrechner zu benutzen, gibt man Zahlen und arithmetische Zeichen direkt in die R-Kommandozeile ein und drückt die Eingabetaste, um die Berechnungen auszuführen. Die Ein- und Ausgaben für die Berechnungen der relativen Häufigkeit des Lemmas ‚Hund‘ im DWDS-Kernkorpus als Dezimalzahl, in Prozent bzw. in pMW sehen z.B. so aus:

Anmerkungen:

R als Programmiersprache

Für dieses Seminar müssen Sie zwar nicht mit R programmieren, aber für eine korrekte und effiziente Verwendung von R ist es dennoch sinnvoll, gewisse Eigenschaften von R als Programmiersprache kennenzulernen.

Variablen

Oft will man bestimmte Eingaben oder auch Ergebnisse bestimmter Berechnungen wiederholt verwenden. Das ist z.B. der Fall bei der Berechnung des Differenzenkoeffizienten, wo die erwartete Häufigkeit zuerst berechnet und das Ergebnis dann zweimal verwendet wird. Wiederverwendbarkeit ist eines der Hauptmerkmale einer Programmiersprache und das R-System verfügt auch über eine Programmiersprache (die auch R heißt). In Programmiersprachen wird Wiederverwendbarkeit durch sogenannte Variablen unterstützt.

Die folgenden Eingaben in der R-Kommandozeile zeigen, wie man den Differenzenkoeffizienten des Lemmas ‚Hund‘ im DWDS-Kernkorpus für die Dekade 1960-1969 als Teilkorpus anhand der vorher angegebenen Formeln unter Verwendung von Variablen in R berechnen kann:

Funktionen

Für die Berechnung von Häufigkeitsklassen in R nach der angegeben Formel brauchen wir einen weiteren Bestandteil von Programmiersprachen, Funktionen:

Hier ist die Berechnung in R der Häufigkeitsklasse des Lemmas ‚Hund‘ im DWDS-Kernkorpus; sie enthält zwei Funktionsaufrufe, die ineinander verschachtelt sind:

Anmerkungen:

Selbst-definierte Funktionen

Außer sehr vielen eingebauten Funktionen (von denen wir im Laufe dieses Seminars noch einige kennenlernen werden) gibt es in R, wie in jeder Programmiersprache, auch die Möglichkeit eigene Funktionen zu definieren.

R hat z.B. keine eingebauten Funktionen für die Berechnung der vorher vorgestellten Häufigkeitsmaße. Zwar könnten wir diese wie oben durch Folgen von Eingaben in der Kommandozeile berechnen, aber für wiederholte Berechnungen mit verschiedenen Werten wäre es viel praktischer, sie einfach durch Funktionsaufrufe zu machen. Daher haben wir solche Funktionen definiert, und dazu noch eine Funktion zur Erstellung einer Tabelle von Häufigkeitsklassen; ihre Namen und Argumente lauten wie folgt:

Diese Funktionen sind so definiert, dass sie beim Aufruf die oben gezeigten Berechnungsschritte „unter der Haube“ durchführen und als Ergebnis das entsprechende Häufigkeitsmaß ausgeben.

Ein wesentlicher Unterschied zwischen eingebauten und selbst-definierten Funktionen ist, dass die eingebauten Funktionen schon beim Start der R-Sitzung zur Verfügung stehen und sofort aufgerufen werden können, während selbst-definierte Funktionen R zuerst bekannt gemacht werden müssen, bevor sie verwendet werden können. Eine Möglichkeit der Bekanntmachung ist, die Funktion gleich in der R-Kommandozeile zu definieren (z.B. könnten Sie die unten angegebenen Definitionen per Copy-&-Paste in R eingeben).

Aber insbesondere wenn man viele selbst-definierten Funktionen benutzen will, ist es praktischer, die Definitionen in einer Datei zu speichern und diese durch Aufruf der eingebauten R-Funktion source() mit dem Namen der Datei als Argument in R laden. Der Dateiname kann auch die URL (Adresse) einer Seite im Internet sein, dann wird diese in R heruntergeladen. Eine solche Seite mit eigens für dieses Seminar definierten R-Funktionen, darunter die für die vorgestellten Häufigkeitsmaße, habe ich eingerichtet. Um also diese Funktionen in R zu laden, geben Sie folgende Anweisung in R ein:

Anmerkung:

Nach dieser Eingabe stehen in der aktuellen R-Sitzung die Funktionen freq.rel(), freq.prop(), diff.koeff() und freq.klasse() zur Verfügung. Damit können die obigen Berechnungen der Häufigkeitsmaße noch einmal durchgeführt werden, jetzt einfach als Funktionsaufrufe. Dabei gibt es mehrere völlig äquivalente Formen des Aufrufs, für freq.rel() z.B. folgende:

Die ersten zwei Formen enthalten explizite Zuweisungen von Werten an die Argumente (dafür wird in R das Gleichheitszeichen statt ‚<-‘ verwendet); in der ersten Form wird der Wert direkt als Zahl übergeben, in der zweiten Form mittels einer Variable, der der Zahlenwert vor dem Funktionsaufruf zugewiesen worden ist. Bei Funktionsaufrufen mit expliziten Argumentzuweisungen ist die Reihenfolge der Argumente unerheblich:

In der dritten und vierten Form des Aufrufs werden nur die Argumentwerte angegeben (in der dritten direkt als Zahl, in der vierten mittels einer Variable). Bei solchen Aufrufen muss die Reihenfolge der Werte mit der Reihenfolge der Argumente in der Funktionsdefinition genau übereinstimmen, sonst kann das Ergebnis inkorrekt sein:

Daher sind Funktionsaufrufe mit expliziten Argumentzuweisungen sicherer – und meist auch lesbarer.

Wie oben angegeben nimmt die Funktion freq.rel() auch noch ein drittes Argument namens ‚type‘, das bestimmt, ob das Ergebnis in pMW, Prozent oder als Dezimalzahl ausgegeben wird. Anders als die Argumente ‚freq.absolut‘ und ‚korp.groesse‘ hat ‚type‘ einen voreingestellten Wert, nämlich "pMW". Argumente mit einem voreingestellten Wert dürfen beim Funktionsaufruf weggelassen werden, dann wird dieser Wert automatisch übergeben (deswegen sind die Ausgaben der oben gezeigten Aufrufe von freq.rel() alle in pMW). Möchte man einen nicht voreingestellten Wert des Arguments verwenden, muss dieser explizit angegeben werden (N.B.: Der Wert des ‚type‘-Arguments muss in Anführungsstrichen stehen):

Hier sind noch Aufrufe der Funktionen diff.koeff(), freq.klasse() und freq.klasse.tab() mit expliziten Argumentzuweisungen; diese stellen keine Besonderheiten dar:

Bei der Funktion freq.prop() gibt es aber sehr wohl eine Besonderheit: Nach der Formel für proportionale Häufigkeiten sollen die Verhältnisse von mindestens zwei aber im Prinzip beliebig vielen Suchergebnissen berechnet werden können. In R kann dieser Möglichkeit durch einen speziellen Datentyp namens Vektor Rechnung getragen werden: Ein Vektor ist eine Folge von Daten derselben Art (z.B. Zahlen wie 1, 2 oder Zeichenketten wie "abc", "def"). Das Argument ‚freqs.absolut‘ von freq.prop() nimmt als Wert also einen Vektor von (zwei oder mehr) Zahlen (N.B.: Im Namen des Arguments steht ‚freqs‘ und nicht ‚freq‘, um anzudeuten, dass der Vektor mindestens zwei Zahlen enthalten soll).

Für die Eingabe von Vektoren gibt es in R verschiedene Möglichkeiten, von denen die eingebaute Funktion c() wohl am allgemeinsten und am nützlichsten ist (der Name ‚c‘ steht für das englische Wort concatenate, etwa verketten, verknüpfen, aneinanderhängen). Diese Funktion nimmt als Argumente beliebig viele durch Kommata getrennte Elemente desselben Datentyps. Hier sind also mögliche Aufrufe der Funktion freq.prop():

Anmerkung:

Exkurs: Funktionen definieren

Um Funktionen zu definieren, verwendet man die eingebaute R-Funktion function():

Die Definitionen der Funktionen für Differenzenkoeffizienten und Häufigkeitsklassen sind direkte Übertragungen der Anweisungen in den obigen Beispielen:

Die Definitionen der Funktionen für relative und proportionale Häufigkeiten, sowie für Tabellen von Häufigkeitsklassen, sind komplizierter, weil sie bestimmte Programmiertechniken oder weitere eingebaute R-Funktionen verwenden:

(Zur Information: Die Operatoren ‚^‘ und ‚:‘ sowie die arithmetischen Operatoren sind eigentlich Funktionen in R, die jedoch normalerweise in der vertrauteren mathematischen Schreibweise als binäre Operatoren zwischen ihren Argumenten verwendet werden. Aber auch die Verwendung in Form eines Funktionsaufrufs ist möglich, dann muss allerdings das Zeichen, das eigentlich der Name der Funktion ist, in Anführungsstriche gesetzt werden: z.B. "*"(2, 3), "/"(2, 3), "+"(2, 3), "-"(2, 3), "^"(2, 3), ":"(2, 3). Selbst die Variablenzuweisung kann in Form eines Funktionsaufrufs erfolgen: "<-"(mein.var, 123). Dennoch sollten Sie der Lesbarkeit halber i.d.R. nur die Schreibweise als binäre Operatoren verwenden.)

Darstellung von Dezimalzahlen

Wenn Sie die Darstellung von Dezimalzahlen mit Nullen nach dem Punkt der Exponentialdarstellung vorziehen, können Sie Letztere mit der eingebauten R-Funktion options() und der eingebauten R-Variable scipen, der Sie einen hohen Zahlenwert zuweisen, unterbinden und anschließend wiederherstellen:

Anmerkung:

R-Sitzung beenden, Daten aufräumen und speichern

Sie können die laufende R-Sitzung durch Aufruf der eingebauten R-Funktion q() (ohne Argumente) in der Kommandozeile beenden; unter MS-Windows oder macOS können Sie die Sitzung auch über das File-Menü beenden.

Bevor die Sitzung beendet wird, fragt R, ob die Daten der Sitzung – die Variablen und Funktionen, die Sie definiert haben – gespeichert werden sollen. Antworten Sie mit ja, stehen dieselben Daten zu Beginn der nächsten Sitzung wieder zur Verfügung, Sie müssen sie also nicht noch einmal in R eingeben – vorausgesetzt, Sie starten R im selben Ordner (Verzeichnis) Ihres Rechners, in dem Sie die letzte Sitzung beendet haben. (Die Datei, in der die Daten gespeichert sind, hat den Namen „.RData“; diese ist keine Text-Datei, kann aber in R geladen werden.)

Variablenzuweisungen, Funktionsaufrufe usw., die Sie in der laufenden Sitzung gemacht haben, können Sie mit Hilfe der Pfeiltasten (nach oben und nach unten) wieder in die Eingabeaufforderung bringen, ohne sie zu erneut eintippen zu müssen. Das gilt auch für solche Eingaben aus früheren Sitzungen bei normalen R-Installationen. (Die Datei, in der alle Eingaben gespeichert sind, hat den Namen „.Rhistory“; diese ist eine Text-Datei, Sie können sie also mit einem Texteditor lesen und damit alle Eingaben, die Sie gemacht haben, nachvollziehen.)

Wenn Sie während oder vor Beenden der laufenden Sitzung bestimmte Daten löschen wollen, können Sie das durch Aufruf der eingebauten R-Funktion rm(), wobei die Daten, d.h. die Namen der Variablen und Funktionen, als durch Kommata getrennte Argumente von rm() angegeben werden müssen (z.B. rm(hund.fa, katze.fa, maus.fa)). Vorher können Sie durch Aufruf der eingebauten R-Funktion ls() (ohne Argumente) eine Auflistung aller verwendeten Variablen und Funktionen erhalten. Sie können alle von Ihnen verwendeten Daten mit folgender Eingabe auf einmal löschen: rm(list=ls()).

Korpushäufigkeitsmaße Sitemap Übungsaufgaben zu Häufigkeitsmaßen