Tipps&Tricks

Tipps & Tricks

Hier finden Sie Tipps und Tricks zu R. Oft sind nützliche Informationen “irgendwo” im Text oder Programmcode vergraben und hier werden sie tabellarisch aufgeführt!

Übersicht:

  • Grafik, Ausgabe Histogramm-Daten
  • Grafik, mehrere Histogramme darstellen  NEU!
  • Grafik, Bereiche “einfärben”
  • Grafik, Bereich “einfärben” (unter einem Polygonzug)
  • Grafik, Farben
  • Grafik, “Errorbar”, Abweichungen darstellen
  • Grafik, Lattice
  • Grafik, Legende (Achsenbeschriftung)
  • Grafik, Legende
    (Achsenbeschriftung, Schrifttyp)
  • Grafik, Legende
    (Zahlendarstellung)
  • Hilfe, zusätzliche Unterstützung
    NEU!
  • if-Variante

Thema

Tipp oder Trick...

 

Argumente einer Funktion

Sind Ihnen die Argumente zum Funktionsaufruf nicht mehr geläufig und Sie möchten sich auch nicht durch die Hilfefunktion zur Funktion arbeiten, hilft das Argument args(Funktion) weiter. Die Argumente zur Funktion kontingenz() (Kontingenzanalyse) über die Funktion args() aufgerufen, sind folgende:

      > args(kontingenz)
      function (x, P = 0.95, info = TRUE)
      NULL

Oder für die Funktion rnorm() werden folgende Argumente benötigt:

      > args(rnorm)
      function (n, mean = 0, sd = 1)
      NULL

 

“...”-Argument

Wenn Sie eigene Funktionen schreiben und in dieser Funktion z. B. die argumentreiche Funktion plot() verwenden, besteht bei Ihnen sicher der Wunsch nicht alle für plot() nötige Argumente formal anzugeben. Um dennoch die Möglichkeiten von plot() nutzen zu können, bietet R das ...-Punkte-Argument an.
D. h., Sie können über das ...-Punkte-Argument die nötigen Argumente an die plot()-Funktion weiterleiten. Diese Funktionsweise wird am Beispiel der Funktion mean() gezeigt:
DreiPunkte

Beinhaltet Ihr Datensatz Daten mindestens ein NA (z. B.: 95 94 96 NA 97 93) liefert folgender Funktionsaufruf dreipunkte(Daten) kein brauchbares Ergebnis. Aber durch das ...-Punkte-Argument liefert dieser Aufruf dreipunkte(Daten, na.rm = T) das richtige Ergebnis 95. Das Argument na.rm = T durch die ...-Punkte zur Funktion mean() “durchgeleitet”!

Seitenanfang 

Dateien einlesen

Möchten Sie dem Anwender einer Funktion die Auswahl der zu ladenden Datei überlassen, hilft Ihnen die Funktion choose.files() weiter. Wird die Funktion aufgerufen, wird das vom Betriebssystem abhängige Dateiauswahlmenü gezeigt:

Datei_auswahl

Folgenden R-Code könnten Sie in Ihrer Funktion nun nutzen:

    Datei <- choose.files(filters = Filters[c("txt", "All"),])
    Inhalt <- read.table(Datei, header = T, sep=";")

Durch obige Filtereinstellung (filters), werden nur “.txt”-Dateien angezeigt. Diese Einstellung kann natürlich geändert werden:

Datei_auswahl_2

Die Variable Datei enthält nach der Auswahl die komplette Pfad-Angabe und nach dem Einlesen der Datei in das Objekt Inhalt könnte die Ausgabe wie folgt aussehen:

Datei_auswahl_3

Als Variante können Sie auch um z. B. eine Tabellenkalkulationsdatei einzulesen schreiben:

    > Daten <- read.csv2(choose.files(), ...)

Die ... sind Platzhalter für die read.csv2-Funktionsargumente.

Seitenanfang 

Dateien vergleichen

Schreiben Sie eigene Funktionen, kann es passieren, dass Sie mehrere “Versionen” dieser Funktion auf Ihrer Festplatte/Server gespeichert haben. Die Gründe können natürlich vielfältig sein, aber der häufigste Grund ist sicher in der “Entwicklungsfolge” zu sehen. Eine Entwicklungsfolge beschreibt den Entwicklungsprozess aus Versuch und Irrtum und der resultierenden Datensicherung.
Um hier nicht den Überblick zu verlieren, kann ein Vergleichsprogramm wie z. B. UltraCompare weiterhelfen. Mit diesem Programm wird der Inhalt von zwei Textdateien dargestellt, verglichen und Unterscheidungen dargestellt:
Vergleich

Sie können dann die unterschiedlichen Inhalte in das linke oder rechte Fenster durch “Knopfdruck” übernehmen.

Seitenanfang 

Datenobjekt-Info

Das Paket Hmisc bietet einige nützliche Funktionen an und eine davon ist die Funktion describe(). Über diese Funktion werden Informationen zum R-Datenobjekt, z. B. eines Datensatzes (data.frame()) ausgegeben. Hier ein Beispiel zu einem Datensatz:

      > Daten
       Wirkstoff.A Wirkstoff.B Wirkstoff.C Pruefer   Datum
      1    99.1    97.3    95.3  Karl 2008-08-10
      2    99.3    97.5    95.1  Karl 2008-08-11
      3    98.8    96.9    95.6  Peter 2008-08-12
      4    98.9    97.2    95.7  Karl 2008-08-13
      5    99.3    97.4    95.1  Peter 2008-08-14
      6    99.2    97.1    95.5  Peter 2008-08-15
      7    99.5    97.0    95.6  Karl 2008-08-16
      8    99.4    96.9    95.4  Peter 2008-08-17
      9    99.0    97.4    95.8  Peter 2008-08-18

       

Und hier die Information über die Funktion describe():

    > describe(Daten)
    Daten

     5 Variables   9 Observations
    -----------------------------------------------------------------------------
    Wirkstoff.A
       n missing unique  Mean
       9    0    8  99.17

         98.8 98.9 99 99.1 99.2 99.3 99.4 99.5
    Frequency  1  1 1  1  1  2  1  1
    %      11  11 11  11  11  22  11  11
    -----------------------------------------------------------------------------
    Wirkstoff.B
       n missing unique  Mean
       9    0    7  97.19

         96.9 97 97.1 97.2 97.3 97.4 97.5
    Frequency  2 1  1  1  1  2  1
    %      22 11  11  11  11  22  11
    -----------------------------------------------------------------------------
    Wirkstoff.C
       n missing unique  Mean
       9    0    7  95.46

         95.1 95.3 95.4 95.5 95.6 95.7 95.8
    Frequency  2  1  1  1  2  1  1
    %      22  11  11  11  22  11  11
    --------------------------------------------------------------------------------
    Pruefer
       n missing unique
       9    0    2

    Karl (4, 44%), Peter (5, 56%)
    -----------------------------------------------------------------------------
    Datum
       n missing unique
       9    0    9

         2008-08-10 2008-08-11 2008-08-12 2008-08-13 2008-08-14 2008-08-15
    Frequency     1     1     1     1     1     1
    %         11     11     11     11     11     11
         2008-08-16 2008-08-17 2008-08-18
    Frequency     1     1     1
    %         11     11     11
    -----------------------------------------------------------------------------

 

Seitenanfang 

Datenobjekt-Info anlegen

Über die Funktion comment() sind Sie in der Lage, einer z. B. kryptischen Variablenbezeichnung einen erklärenden Kommentar anzuheften. Hierzu ein kleines Bespiel:

    > x <- rnorm(100)
    > comment(x) <- "Mein Kommentar"

Der obige Kommentar “Mein Kommentar” wurde dem Objekt x zugeordnet. Lassen Sie sich wie gewohnt den Inhalt von x anzeigen oder verwenden ihn in Berechnungen, merken Sie davon nichts. Sie können sich den Kommentar mit comment(x) oder auch über str() anzeigen lassen:

    > comment(x)
    [1] "Mein Kommentar"
    > str(x)
     atomic [1:100] -0.0776 0.7635 0.5122 -0.8217 -0.9334 ...
     - attr(*, "comment")= chr "Mein Kommentar"

Die Erweiterung desObjektes x lässt sich auch über die Funktion attributes() zeigen:

    > attributes(x)
    $comment
    [1] "Mein Kommentar"

     

Seitenanfang 

Datenbank ODBC
CSV

Datenbankanbindung über ODBC und dem Paket RODBC
Die Datenbankanbindung wird exemplarisch am Beispiel einer CSV-Datei (Textdatei aus einer Tabellenkalkulation) beschrieben. Sicher können derartige Dateien nicht als Datenbank gesehen werden, aber die Vorgehensweise über ODBC ist sicher übertragbar auf echte Datenbanken. Bevor unter dem Betriebssystem MS-Windows© auf eine CSV-Datei über ODBC zugegriffen werden kann, muss diese über ODBC-Datenquellen-Adiminstrator mit dem Treiber verknüpft werden. Dazu rufen Sie über die Systemsteuerung die Verwaltung und anschließend Datenquellen (ODBC) auf:

ODBC_1

Im Bereich Benutzer_DSN fügen den Datenquellen-Treiber und...

ODBC_2

... ordnen die Daten-Datei, hier als Beispiel SPCDaten.csv, zu:

ODBC_3

Achten Sie hier auf das Datenbankverzeichnis. Schließen Sie die Datenbankadministration ab und laden in die R-Umgebung das Paket RODBC. Um nun mit der Datenbank zu arbeiten, muss eine Verbindung zur Datenbank aufgebaut werden. Dazu dient die Funktion odbcConnect():

      > DB <- odbcConnect("SPCDaten.csv")

Die Verbindungsdaten werden im Objekt DB gespeichert und zeigt folgenden Inhalt:

      > DB
      RODB Connection 1
      Details:
       case=nochange
       DSN=SPCDaten.csv
       DefaultDir=C:\PROGRAMME\STATISTIK\R-2.6.1\DATENBANK
       DriverId=27
       FIL=text
       MaxBufferSize=2048
       PageTimeout=5

Nun sind Sie in der Lage SQL-Anweisungen auf diese Datenbank anzuwenden. Das einfachste dürfte wohl sein zeige mir den Inhalt von SPCDaten.csv:

      > sqlQuery(DB, ("select * from SPCDaten.csv"))

        Material_Nr Charge  Prüflos Merkmalbezeichnung Untere_EG Untere_WG Merkmal
      1     4711   A 100100001    Wirkstoff_A    95    96  97.3
      2     4711   B 100100002    Wirkstoff_A    95    96  97.1
      3     4711   C 100100003    Wirkstoff_A    95    96  97.5
      4     4711   E 100100004    Wirkstoff_A    95    96  97.6
      5     4711   F 100100005    Wirkstoff_A    95    96  97.2
      6     4711   G 100100006    Wirkstoff_A    95    96  97.8
      7     4711   H 100100007    Wirkstoff_A    95    96  97.7
      8     4711   I 100100008    Wirkstoff_A    95    96  97.6
      9     4711   J 100100009    Wirkstoff_A    95    96  97.8
      10    4712   A 100100010    Wirkstoff_B    48    49  50.2
      11    4712   B 100100011    Wirkstoff_B    48    49  49.7
      12    4712   C 100100012    Wirkstoff_B    48    49  50.3
      13    4712   E 100100013    Wirkstoff_B    48    49  50.0
      14    4712   F 100100014    Wirkstoff_B    48    49  50.1
      15    4712   G 100100015    Wirkstoff_B    48    49  49.9
      usw.

Sie können jede gültige SQL-Anweisung anwenden, z.b die Selektion der 4711er-Materialien:

      > sqlQuery(DB, ("select * from SPCDaten.csv where Material_Nr = 4711"))

       Material_Nr Charge  Prüflos Merkmalbezeichnung Untere_EG Untere_WG Merkmal
      1    4711   A 100100001    Wirkstoff_A    95    96  97.3
      2    4711   B 100100002    Wirkstoff_A    95    96  97.1
      3    4711   C 100100003    Wirkstoff_A    95    96  97.5
      4    4711   E 100100004    Wirkstoff_A    95    96  97.6
      5    4711   F 100100005    Wirkstoff_A    95    96  97.2
      6    4711   G 100100006    Wirkstoff_A    95    96  97.8
      7    4711   H 100100007    Wirkstoff_A    95    96  97.7
      8    4711   I 100100008    Wirkstoff_A    95    96  97.6
      9    4711   J 100100009    Wirkstoff_A    95    96  97.8

       

Oder Materialien dessen Merkmals-Wert > 97,5 beträgt:

      > sqlQuery(DB, ("select * from SPCDaten.csv where Merkmal > 97.5"))

       Material_Nr Charge  Prüflos Merkmalbezeichnung Untere_EG Untere_WG Merkmal
      1    4711   E 100100004    Wirkstoff_A    95    96  97.6
      2    4711   G 100100006    Wirkstoff_A    95    96  97.8
      3    4711   H 100100007    Wirkstoff_A    95    96  97.7
      4    4711   I 100100008    Wirkstoff_A    95    96  97.6
      5    4711   J 100100009    Wirkstoff_A    95    96  97.8
       

Über Paket-Funktionen können natürlich auch Tabellen geändert und gesichert werden. Schauen Sie sich die Möglichkeiten an....!

Seitenanfang 

Funktionsmodell, Aufruf

Ein z. B. lineare Modell wird über den Funktionsaufruf lm(y ~ x) geschätzt. Möchten Sie diesen Aufruf auf beispielsweise folgende Funktion

          y = x + x^2

 anwenden, muss die arithmetische Bedeutung im Modell berücksichtigt werden. Ein Aufruf in dieser Form

          > lm(y ~ x + x^2)

zeigt folgendes Ergebnis:

          Call:
          lm(formula = y ~ x + x^2)

          Coefficients:
          (Intercept)      x 
             -0.120    1.034

Obiges Ergebnis ist sicher nicht das gewünschte Ergebnis.

          > lm(y ~ x + I(x^2))

          Call:
          lm(formula = y ~ x + I(x^2))

          Coefficients:
          (Intercept)      x    I(x^2) 
            -0.27000   1.14679   -0.01607

Durch die Funktion I()wird die arithmetische Bedeutung beibehalten.

Seitenanfang 

“Globale” Variable

Möchten Sie eine Variable (Datenstruktur) auch außerhalb einer Funktion dem Anwender zur Verfügung stellen, können Sie dies über das Zuweisungszeichen “<<-” erreichen. Hierbei sollten Sie aber die Eindeutigkeit um nicht in Konflikt mit anderen Objekten zu kommen bedenken. Empfehlen möchte ich Ihnen z. B. folgendes Konstrukt:

    Funktion.GlobaleVariable <<- “Inhalt”

Funktion ist die Funktionsbezeichung und GlobaleVariable die Bezeichnung der globalen Variable. Diese Zusammensetzung der globalen Variable stellt eine halbwegs eindeutige Möglichkeit dar.

Seitenanfang 

Grafik, Ausgabe als Datei

Möchten Sie die grafische Ausgabe nicht auf den Bildschirm darstellen, sondern als Datei ausgeben, verwenden Sie die Funktionen jpeg(), bmp() oder png():

      > jpeg(filename = "Boxplot.jpg") # Es wird ein Boxplot erzeugt
      > boxplot(x)           # Erzeugung des Boxplots
      > dev.off()            # Schließen des Ausgabegerätes
      null device
           1

Die Ausgabedatei befindet sich nun in dem zuvor eingestellten Verzeichnis:

Boxplot

Seitenanfang 

Grafik, Ausgabe mehrere Grafiken in einer Darstellung

NEU!

 

Die simple Frage “Wie können z. B. 2 Grafiken zusammen dargestellt werden?” kann wie folgt beantwortet werden:

    > plot(sin,0,2*pi,ylab="")
    > plot(cos,0,2*pi,ylab="",col= "red", add=TRUE)

Grafik_2Abbildungen

Der Schlüssel ist hier das Argument add=TRUE!

Seitenanfang 

Grafik, Ausgabe mehrere Darstellungen

Möchten Sie mehrere Grafiken in einem Grafikfenster ausgeben, können Sie dies über das Argument fig der der Funktion par() erreichen. Mit dem Argument fig werden die Ausgabebereiche des Grafikfensters angesprochen. Folgendes Beispiel soll dies verdeutlichen:

Doppelte_Grafik

Das Objekt x beinhaltet die darzustellenden Daten. Über par() mit dem Argument fig wird festgelegt, dass unten 35% der Grafikfläche für den Boxplot zur Verfügung gestellt wird. Der Boxplot wird horizontal ausgegeben:

        > x <- rnorm(100, 95,1)
        > par(fig=c(0,1,0,0.35))
        > boxplot(x, horizontal=TRUE)

Über die nächste par()-Funktion werden die restlichen 75% des Grafikfensters zur Ausgabe des Histogramms festgelegt. Das Histogramm wird als Dichtefunktion (prob)mit einer gestrichelten Linie (lines) dargestellt:

        > par(fig=c(0,1,.25,1), new = TRUE)
        > hist(x, prob=TRUE)
        > lines(density(x), lty=2)

 

Seitenanfang 

Grafik, Streudiagramm und Boxplot

Die Grafikfunktion boxplot() verfügt über das Attribut add und damit sind Sie in der Lage, ein Boxplot zur ergänzenden Darstellungen z. B. zu einem Streudiagramm zusätzlich anzuzeigen. Diese Möglichkeit ist eine Variante zu der hier beschriebenen. Beispiel:

        > x <- rnorm(100, 10,0.5)
        > plot(x)
        > boxplot(x,range = 0, add = T, boxwex = 5, col = "grey", at = -1)

Über das Attribut add = T wird der Boxplot zur Grafik addiert, mit dem Attribut boxwex = 5 wird die “Breite” des Plots und über at = -1 wird die Position (ein bisschen ausserhalb der dargestellten Daten) festgelegt:

Streu-Box-Plot

 

Seitenanfang 

Grafik, mehrere Histogramme darstellen

NEU!

 

Möchten Sie mehrere Histogramme darstellen, hilft die Funktion multhist() des Paketes plotrix weiter:

    > Daten <- list(rnorm(50, mean=3),rnorm(50,mean=5, sd=2),rnorm(50,mean=4))
    > multhist(main="3 Histogramme", Daten)

Histogramm_drei

 

Seitenanfang 

Grafik, Ausgabe Histogramm-Daten

Möchten Sie zusätzlich beispielhaft zu einem Histogramm die Anzahl der Beobachtungen in einer Klasse ausgeben, kann als “Anregung” Ihnen sicher folgendes Code-Schnipsel weiterhelfen (Siehe auch hier!):

    > x <- rnorm(10000, 0, 1)
    > hx <- hist(x, breaks=50, plot=FALSE)
    > plot(hx, col=ifelse(abs(hx$breaks) < 1.96, 3, 2), main="Histogramm", xlab="Ihre z-normierte Daten", ylab="Häufigkeit")
    > text(hx$mids, hx$counts+2, label=c(hx$counts), pos = 3)

Histogramm_2

Die Anzahl der Klasseninhalte wird über die Funktion text() ausgegeben. Dabei bestimmt der Parameter pos die Textausgabeposition. Experimentieren Sie mit diesem Parameter und schauen Sie auch in die Hilfe zur Funktion text().

 

Seitenanfang 

Grafik, Bereiche unterschiedlich “einfärben”

Es kann hilfreich sein, z. B. in einem Histogramm Bereiche unterschiedlich farblich darzustellen. Als “Anregung” soll Ihnen folgendes Code-Schnipsel dienen:

        > x <- rnorm(10000, 0, 1)
        > hx <- hist(x, breaks=50, plot=FALSE)
        > plot(hx, col=ifelse(abs(hx$breaks) < 1.96, 3, 2), main="Histogramm", xlab="Ihre z-normierte Daten", ylab="Häufigkeit")

Histogramm

Interessant ist hier die ifelse()-Funktionalität! Ist der Absolutwert kleiner als 1,96 wird der Farbwert 3 für grün (= yes) und wenn größer als 1,96 wird der Farbwert 2 für rot (= no) verwendet.

 

Seitenanfang 

Grafik, Bereich unter einem Polygonzug einfärben

 

Besteht der Wunsch, die Fläche unter z. B. einem Polygonzug einzufärben, können Sie dieses über die Funktion polygon() erreichen:

    > x <- 1:50
    > y <- rnorm(50)
    > plot(x,y)
    > lines(x,y)
    > polygon(cbind(c(min(x),x,max(x)),c(min(y),y,min(y))), col="grey")

Hier das Resultat:

Polygonzug

Seitenanfang 

Grafik, Farben

Möchten z. B. Grafiken mit unterschiedlichen Farben erzeugen, stellen Sie sich vielleicht die Frage, welche vordefinierte Farben R Ihnen zur Verfügung stellen kann! Hier hilft Ihnen die Funktion colors() weiter. Über die Konsole eingegeben gibt Sie Ihnen zur R-Version 2.10.1 1965 Farben aus.

Möchten Sie Ihre eigene Farbe kreieren, können Sie die über die Funktion rgb() erledigen:

    > Farbe <- rgb(43,33,235, alpha = 200, maxColorValue = 255)

Die ersten 3 Werte beschreiben den Farbton, hier ein blau, und der alpha-Wert gibt die Helligkeit wieder. Als Beispiel werden ein paar Punkte grafisch ausgegeben:

    > plot(1:6, pch = 20, col = Farbe)

Eigene_Farbe

 

Seitenanfang 

Grafik, “Errorbar”, Abweichungen darstellen

Oft besteht der Wunsch, neben der Ausgabe einer z. B. linearen Funktion auch die Residuen grafisch darzustellen. Ohne Aufwand können Sie dies mit der Funktion errbar() aus dem Paket Hmisc erreichen. Ausgehend von folgendem Beispieldatensatz...

Errorbar_Beispieldatensatz

... wird Ihnen über den Funktionsaufruf...

> errbar(Beispiel$X, Beispiel$Y, Beispiel$Ymax, Beispiel$Ymin, xlab="X-Daten", ylab="Y-Daten", main="Residuen-Beispiel")

... neben den X-Y-Werten die Abweichungen (Ymin und Ymax) grafisch ausgegeben:

Errorbar_Beispielgrafik

 

Seitenanfang 

Grafik, Legende (Achsenbeschriftun g)

Grafikfunktionen wie plot() nehmen Ihnen in der grafischen Darstellung Ihrer Daten schon viel Arbeit ab, indem Sie sich keine Gedanken über die Achsenformatierung und -beschriftung machen müssen. Möchten Sie irgendwann aber Ihre eigene Achsenbeschriftung vornehmen, ist diese Automatismus störend.
In dem hier beispielhaft verwendeten Datensatz würde in der grafischen Darstellung über plot() der Index als x-Achsenbeschriftung dargestellt. Als Beschriftung soll aber der zeitliche Verlauf der Zeitreihe als x-Achse ausgegeben werden, wie in der Grafik gelb markiert.

Grafik_Legende

Dies kann in zwei Schritten erreicht werden. Im 1. Schritt wird die durch plot vorgegebene x-Achsenbeschriftung über den Parameter xaxt="n" ausgeschaltet:

> plot(Rohoel$Preis, type="o", main="Rohölpreis", ylab="Preisindex", xlab="Zeitraum", xaxt="n")

Das x-Achsenlabel Zeitraum wurde aus Platzgründen in obiger Grafik nicht dargestellt. Im 2. Schritt wird über die Funktion axis() die 98 Labelwerte aus dem Vektor Rohoel$Monat der x-Achse (1) zugeordnet und dargestellt:

> axis(1,at=seq(1:98), labels=Rohoel$Monat)

Die von Ihnen gewünschte Achse wird über den ersten Parameter, hier 1 für die x-Achse, der Funktion axis() angesprochen.

Seitenanfang 

Grafik, Legende (Achsenbeschriftun g, Schriftyp)

 

 

Möchten Sie einen Teil der Legende besonders hervorheben, können Sie dieses wie im Folgenden Beispiel gezeigt erreichen:

> plot(Daten$Y ~ Daten$X, xlab=(expression(Das ~ sind ~ italic(meine) ~ x-Daten)), ylab=expression(Das ~ sind ~ bold(meine) ~ y-Daten))

 
Grafik_Legende_2

(bold = fett, italic = kursiv)

Müssen Sie griechische Buchstaben im Legendentext darstellen, können Sie dieses über die Funktion expression() erreichen:

    > Legende <- expression(paste(phi, " /", "cm"))
    > plot(Daten, xlab <- Legende)

Grafik_Legende_3

 

Seitenanfang 

Grafik, Legende
(Zahlendarstellung)

 

 

Möchten Sie z. B. die Daten der X-Achse z. B. mit einem Tausender-Trennzeichen versehen, können Sie dieses über die Funktion prettyNum() erreichen. Folgendes Beispiel zeigt die Funktionsweise:

Die x-Daten sollen die zukünftige X-Achse darstellen:

    > x
    [1] 10000 20000 30000 40000

Die x-Daten werden zu Label-Daten über prettyNum() aufgehübscht:

    > x_label <- prettyNum(x, big.mark = ".")
    > x_label
    [1] "10.000" "20.000" "30.000" "40.000"

Die y-Daten werden grafisch ausgegeben und dabei wird wie im obigen Beispiel die X-Achse zuerst unterdrückt...

    > plot(y, type="o", main="prettyNum-Beispiel", ylab="Y-Achse", xlab="X-Achse", xaxt="n")

... und nun als X-Achse die Labels ausgegeben:

    > axis(1, at=seq(1:4), labels=x_label)

Hier das Resultat:

Grafik_prettyNum

 

Seitenanfang 

Hilfe, zusätzliche Unterstützung

NEU!

 

Über das Paket SOS erhalten zusätzliche nützliche Hilfefunktionen. Nach dem Laden des Paketes erhalten Sie über die ???-Funktion Informationen in welchen Paketen (wenn möglich) die gesuchte Funktion enthalten ist. Suchen Sie z. B. die spline-Funktion gehen Sie wie folgt vor:

      > Ergebnis <- ???spline

Das Suchergebnis wird in dem Objekt Ergebnis abgelegt und die Anzahl der Treffer ausgegeben:

      found 1280 matches; retrieving 20 pages, 400 matches.
      2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Rufen Sie das Ergebnis auf ...

      > Ergebnis

... wird Ihnen das Suchergebnis im Browser angezeigt:

Suchergebnisse

Klicken Sie im linken Bereich Description and Link auf einen entsprechenden Link, wird Ihnen die HTML-Hilfe zum Paket bzw. zur Funktion angezeigt!

 

Seitenanfang 

if-Variante

Im Folgenden wird eine verkürzte if-Abfrage beschrieben. Aber Vorsicht! Denken Sie hier bei der Verwendung an die Lesbarkeit des Codes!
Die Variable Daten beinhaltet z. B.: "a" "b" "b" "b" "c". Daten soll auf b’s geprüft werden und wenn vorhanden, gegen z’s ausgetauscht werden:

        Daten
        [1] "a" "b" "b" "b" "c"

        Daten[Daten=="b"] <- "z"

        Daten
        [1] "a" "z" "z" "z" "c"

Seitenanfang 

Interpolation

Eine einfache aber dennoch oft gestellte Frage: Wie werden in R Zwischenwerte interpoliert? Sie erreichen dies über die Funktion approx(). Im Folgenden Beispiel werden die Werte zwischen 1 und 10 linear interpoliert:

        > x <- c(0, 10)
        > resultat <- approx(x, method="linear")

        > resultat$y
         [1] 0.0000000 0.2040816 0.4081633 0.6122449 0.8163265 1.0204082
         [7] 1.2244898 1.4285714 1.6326531 1.8367347 2.0408163 2.2448980
        [13] 2.4489796 2.6530612 2.8571429 3.0612245 3.2653061 3.4693878
        [19] 3.6734694 3.8775510 4.0816327 4.2857143 4.4897959 4.6938776
        [25] 4.8979592 5.1020408 5.3061224 5.5102041 5.7142857 5.9183673
        [31] 6.1224490 6.3265306 6.5306122 6.7346939 6.9387755 7.1428571
        [37] 7.3469388 7.5510204 7.7551020 7.9591837 8.1632653 8.3673469
        [43] 8.5714286 8.7755102 8.9795918 9.1836735 9.3877551 9.5918367
        [49] 9.7959184 10.0000000

Durch den Vorgabewert n = 50 werden 50 Zwischenwerte interpoliert. Die Hilfe zur Funktion approx() zeigt weitere Möglichkeiten.

Seitenanfang 

Menü
(Funktion)

 

Möchten Sie in einer Funktion dem Anwender ein Auswahlmenü anbieten, hilft hier die Funktion menu() weiter:

    Auswahl <- c(menue_text_1, menue_text_2)
    switch(menu(Auswahl, title = "Menübeispiel"), Auswahl <- 1, Auswahl <- 2)

In einer Funktion eingebunden, könnte die Auswahl wie folgt aussehen:

    > menuetest()
    Menübeispiel

    1: Mittelwert
    2: Standardabweichung

    Auswahl: 1
    $Mittelwert
    [1] 95.04431

Obige Beispielfunktion können Sie hier downloaden.

Seitenanfang 

PDF-Datei

 

Möchten Sie eine grafische Ausgabe als PDF-Datei speichern, können Sie die grafische Ausgabe über die pdf()-Funktion als PDF-Datei in das eingestellte Verzeichnis umleiten:

    > pdf(file="Test.pdf")
    > hist(Daten, main="Beispielhistogramm")
    > dev.off()
    pdf
     3
    >

Das Objekt Daten beinhaltet die Beispieldaten und ist nicht weiter spannend. Hier geht es nur darum, die Ausgabe des Histogramms umzuleiten, Die offene PDF-Datei, die hier die Bezeichnung Test.pdf trägt, wird durch die Funktion dev.off() geschlossen. Danach kann die PDF-Datei Acrobat geöffnet werden:

PDF-Datei_1

PDF-Datei_2

 

Seitenanfang 

Programmier-Tipp
(Ausnahmen behandeln)

Sie entwickeln eine Funktion, die eine vom Nutzer anzugebende Datei öffnen und verarbeiten soll. Dabei kann es passieren, dass der Nutzer sich verschreibt. Der Dateiname oder das Verzeichnis entspricht nicht der Erwartung, somit lässt die Datei sich nicht öffnen und die Ausführung der Funktion wird mit einer entsprechenden Meldung abgebrochen.

Das Abbruchverhalten können Sie über die Behandlung von Ausnahmen steuern! Die folgende kleine Beispielfunktion Test soll eine csv-Datei einlesen und den Dateiinhalt auf der Konsole ausgeben:

    > Datei
    [1] "C:/Users/Günter/Documents/Statistik/Zwischen/Wirkstoff.csv"

    > Test <- function(Datei) {
    +   if(file.exists(Datei)) {
    +    Daten <- read.csv2(Datei)
    +    print(Daten)
    +   } else {
    +     stop("Datei kann nicht geöffnet werden! Datei: ", Datei)
    +   }
    + }

Über die Funktion file.exists() wird auf das Vorhandensein der Datei geprüft. Ist die Datei nicht vorhanden, wird die stop()-Funktion im else-Teil ausgeführt. Die stop()-Funktion bricht die Abarbeitung der Funktion Test ab. Ist dieses Verhalten nicht nötig, kann die stop()-Funktion durch die warning()-Funktion ersetzt werden. In diesem Falle, wird die Funktion durchlaufen und zum Schluss einen Warnmeldung ausgegeben.

Zuerst soll das normale Verhalten - der Nutzer hat alles richtig eingegeben - gezeigt werden:

    > Test(Datei)
     Wirkstoff.A Wirkstoff.B Wirkstoff.C Pruefer  Datum
    1    99.1    97.3    95.3  Karl 10.08.10
    2    99.3    97.5    95.1  Karl 11.08.10
    3    98.8    96.9    95.6  Peter 12.08.10
    4    98.9    97.2    95.7  Karl 13.08.10
    5    99.3    97.4    95.1  Peter 14.08.10
    6    99.2    97.1    95.5  Peter 15.08.10
    7    99.5    97.0    95.6  Karl 16.08.10
    8    99.4    96.9    95.4  Peter 17.08.10
    9    99.0    97.4    95.8  Peter 18.08.10

Und nun das Verhalten, wenn die Datei Wirkstoff.csv nicht in dem angegebenen Verzeichnis vorhanden ist:

    > Test(Datei)
    Fehler in Test(Datei) :
     Datei kann nicht geöffnet werden! Datei: C:/Users/Günter/Documents/Statistik/Zwischen/Wirkstoff.csv

 

Seitenanfang 

Programmier-Tipp
(Name des übergebenen Datensatzes)

 

Möchten Sie die Bezeichnung des an einer programmierten Funktion übergebenen Datensatzes auslesen und z. B. in der Funktionsausgabe ausgeben, hilft die Funktionkombination deparse(substitute(x)) weiter:

    Daten.Namen <- deparse(substitute(x))

Die Ausgabe kann dann wie folgt aussehen:

    Untertitel <- paste(Untertitel, " (Datensatz: ", Fakt.Daten.Namen, ")")

Das Beispiel wurde in der Funktion Faktorenanalyse realisiert. Der übergebene Datensatz trägt die Bezeichnung Fakt.Beispiel:

    > faktorenanalyse(Fakt.Beispiel,labelsp=T,info=T,grafik=T)

Die grafische Ausgabe zeigt dann die Bezeichnung des Datensatzes im Untertitel:

Pgm_Tipp_1

Seitenanfang 

Programmier-Tipp (Nutzer-Eingabe abfragen)

Möchten Sie dem Nutzer während der Funktionsausführung Gelegenheit geben, den Funktionsablauf zu beeinflussen oder Eingaben durchzuführen, bietet R Ihnen die Funktion winDialog() an.

Möchten Sie dem Anwender Möglichkeiten zur Beeinflussung des Programmablaufes geben, können Sie die Funktion winDialog() wie folgt nutzen:

    > Nachricht <- "Meine Nachricht!" #Nachricht für den Nutzer
    > # In dem Objekt Eingabe wird die Eingabe abgelegt:
    > Eingabe <- winDialog(type = c("yesnocancel"),Nachricht)

Durch obige Funktion wird dem Nutzer folgendes Dialog-Fenster dargestellt:

winDialog_1

Wie Sie erkennen können, bestimmt das Argument type die angebotenen Schaltflächen. Es stehen Ihnen die Möglichkeiten “ok”, “okcancel”, “yesno” und “yesnocancel” zur Verfügung. Die durch den Nutzer gedrückte Schaltfläche - das Ereignis - wird in der Variablen Eingabe abgelegt:

    > Eingabe
    [1] "YES"

Im hier dargestellten Beispiel wurde die Schaltfläche Ja gedrückt und damit “YES” als Zeichenkette in der Variable Eingabe abgelegt. Die Variable lässt sich nun prüfen und z. B. dementsprechend eine Programmverzweigung durchführen.

Es können vom Nutzer auch konkrete Eingaben über die Funktion winDialogString() abgefragt werden. Im Folgenden soll der Nutzer eine Eingabe in dem Wertebereich von 0 bis 10 durchführen, wobei 1,5 als Vorgabewert festgelegt wird:

    > Nachricht <- "Bitte geben Sie den Wertebereich von 0 bis 10 ein:"
    > Vorgabe <- "1.5"
    > Eingabe <- winDialogString(Nachricht, Vorgabe)

Der Funktionsaufruf zeigt dann folgendes Dialog-Fenster:

winDialog_2

Geben Sie z. B. 2,3 ein, ist der Inhalt der Variablen Eingabe gleich “2.3”. Möchten Sie die Eingabe tatsächlich in einer weiteren Berechnung verwenden, denken Sie an die Typwandlung:

    > Eingabe
    [1] "2.3"
    > Wert <- as.numeric(Eingabe)
    > Wert
    [1] 2.3

 

Seitenanfang 

Programmier-Tipp
(Fortschrittsbalken)

NEU!

Umfangreichere Berechnungen (Schätzungen) benötigen entsprechende Systemkapazitäten Ihres Computers. Möchten Sie nicht im Unklaren über den Status sein, können Sie sich über einen Fortschrittsbalken über den Berechnungs-Fortschritt machen:

Fortschrittsbalken

Sie kennen derartige Funktion aus diversen Programmen und möchten Sie diese Funktionalität in Ihren R-Funktionen nutzen, laden Sie hier die Beispielfunktion auf Ihren Computer runter!

 

Seitenanfang 

Programmier-Tipp
(beliebiger Programmaufruf / URL Aufruf)

NEU!

Besteht die Notwendigkeit aus einer Funktion z. B. ein Windows-Programm aufzurufen, können Sie dies über die shell.exec()-Funktion erreichen. Im Folgendem Beispiel wird der Eitor Ultraedit aufgerufen:

> shell.exec("C:/Program Files/IDM Computer Solutions/UltraEdit-32/uedit32.exe")

Über diese Funktion lassen sich auch URL’s aufrufen:

> shell.exec("http://www.faes.de")

Das URL-Beispiel können Sie direkt ohne Anpassungen ausführen!

Seitenanfang 

OpenOffice

Mit dem Paket odfWeave können Sie Ihre Daten oder Grafiken immer aktuell in einem OpenOffice-Dokument einbinden. D. h., Sie können aus der R-Umgebung Informationen an ein OpenOffice-Textdokument schicken und verfügen dadurch immer über einen aktuellen Bericht. Dazu sind einige wenige Schritte erforderlich. 
Im 1. Schritt muss das Paket odfWeave installiert werden. Nutzen Sie die R-Version 2.5.1 sollten folgende Pakete geladen sein:

Paket_odfWeave_1
Im obigen Beispiel wurden die Pakete XML und lattice vom Paket odfWeave nachgeladen. Um nun im 2. Schritt z. B. den Datensatz Daten in einem OpenOffice-Textdokument auszugeben, sind folgende Anweisungen zwischen << und dem @ im Textdokument nötig:

Paket_odfWeave_2
Dieses OpenOffice-Textdokument speichern Sie z. B. unter den Namen Test.odt und als 3. Schritt geben Sie auf der R-Konsole folgende Anweisung ein:

    odfWeave("C:/Programme/Statistik/R-2.5.1/Eigene_Projekte/Test.odt",
      "C:/Programme/Statistik/R-2.5.1/Eigene_Projekte/Test2.odt")

Mit dieser Anweisung müssen Sie auch die Zieldatei Test2.odt angeben! Die odfWeave-Funktionalität erstellt eine neue Datei, die Zieldatei, um dort den Inhalt von Test.odt und die R-Informationen abzuspeichern. So könnte die Zieldatei Test2.odt aussehen:

Paket_odfWeave_3
Auch Grafiken lassen sich einbinden. Das nächste Bild zeigt das Einbinden der plot()-Funktion ...

Paket_odfWeave_4
... und nach dem Aufruf der obigen R-Anweisung wird Test2.odt erneut erzeugt und zeigt nun zusätzlichen Inhalt:

Paket_odfWeave_5

Hier können Sie die Datei Test.odt zur Ansicht laden. Das Paket odfWeave bietet noch weiter Möglichkeiten, schauen Sie einfach mal...!

Seitenanfang 

Rückgabe, (Funktion)

Gewöhnlich wird das Funktionsresultat über return(x) an die Konsole zurückgegeben. Diese Rückgabe ist natürlich keine Verpflichtung, wie schon in einigen Funktionen gezeigt. Als Zwischenlösung kann die Funktionsrückgabe über invisible(x) betrachtet werden.
D. h., dass komplette Funktionsergebnis kann an ein Objekt (z. B. a) übergeben werden:

a <- funktion(x)

Das Objekt a beinhaltet, wie gewöhnlich, das Funktionsresultat. Wenn Sie nur funktion(x) aufrufen, erhalten Sie keine Ausgabe! Sie wird durch invisible(x) unterdrückt.

Seitenanfang 

Syntaxhervorhebung

Schreiben Sie eigene Funktionen, sind Editoren mit Syntaxhervorhebung sehr hilfreich. Syntaxhervorhebung bedeutet, dass der Editor Ihren eingegeben Code auf R-Funktionen und Schlüsselwörter/Zeichen überprüft und diese farblich besonders darstellt (siehe ...-Argument):

Syntaxhervorhebung

Nun kommt ein bisschen Werbung: Ich nutze den Editor UltraEdit-32 und dieser bietet eine Wortlistendatei (rechte Maustaste -> Ziel speichern unter...) für R zur Syntaxhervorhebung an. Diese Datei wird unter Extras -> Optionen wie gezeigt in den Editor eingebunden:

Syntaxhervorhebung_2

 

Seitenanfang 

Verzeichnis anzeigen

R bietet Ihnen Funktion zum Einlesen eines Verzeichnisses z. B. über die Funktionen dir() oder list.files(). Über das Attribut pattern kann der auszulesende Dateityp festgelegt werden. Möchten Sie nun Dateien vom Typ “csv” auslesen, gehen Sie sicher wie folgt vor:

Datei_einlesen_1

Die Datei 7 (gelbe Markierung) ist allerdings nicht vom Typ “csv” sondern trägt csv in der Dateibezeichung. Um auch diese Dateien auszuschließen, müssen das Argument pattern um “\\” ergänzen:

Datei_einlesen_2

Die Datei “lindacsv.lda.R” wird ausgeschlossen.

Seitenanfang 

Zeit

Berechnungen mit der Zeit
Die Systemzeit, einschließlich Ihrer Zeitzone, wird über die Funktion

      > Sys.time()
      [1] "2008-11-08 20:00:33 CET"

ausgegeben (CET = Central European Time). Über die Funktion ISOdate() und dem Parameter tz zur Einstellung der Zeitzone (tz=”” -> Zeitzone Ihres Computers), belegen Sie Variablen mit den von Ihnen gewünschten Zeiten:

      > Zeit_1 <- ISOdate(2005,1,1, tz="")
      > Zeit_1
      [1] "2005-01-01 12:00:00 CET"
      > Zeit_2 <- ISOdate(2008,11,8, 18,10,05, tz="")
      > Zeit_2
      [1] "2008-11-08 18:10:05 CET"

Möchten Sie Zeitdifferenzen berechnen, bietet R Ihnen die Funktion difftime() an:

      > difftime(Zeit_2, Zeit_1)
      Time difference of 1407.257 days
      > difftime(Zeit_2, Zeit_1, units="weeks")
      Time difference of 201.0367 weeks

Möchten Sie eine Datenobjekt mit einer Sequenz von beispielsweise 10 Tage erzeugen, können Sie dies mit der Funktion seq(as.Date()) erreichen:

      > Tage <- seq(as.Date("2008-11-1"), by = "days", length = 10)
      > Tage
       [1] "2008-11-01" "2008-11-02" "2008-11-03" "2008-11-04" "2008-11-05"
       [6] "2008-11-06" "2008-11-07" "2008-11-08" "2008-11-09" "2008-11-10"

Angeboten werden Ihnen folgende Varianten:

      # Variante 1:
      > Tage <- seq(as.Date("2008-11-1"), to = as.Date("2008-11-8"), by = "days")
      > Tage
      [1] "2008-11-01" "2008-11-02" "2008-11-03" "2008-11-04" "2008-11-05"
      [6] "2008-11-06" "2008-11-07" "2008-11-08"

      # Variante 2, vom Starttag um jeweils eine Woche weitergezählt:
      > WochenTage <- seq(as.Date("2008-11-2"), to = as.Date("2008-11-30"), by = "weeks")
      > WochenTage
      [1] "2008-11-02" "2008-11-09" "2008-11-16" "2008-11-23" "2008-11-30"

Als Parameter für den by-Parameter sind neben den bereits gezeigten Argumente days und weeks auch die Argumente months und years zulässig.

Seitenanfang 

Version vom 16.12.2011