Tracks
/
R
R
/
Lehrplan
/
Grundlagen
Gr

Grundlagen in R

1 Übung

Über Grundlagen

Variablen und Zuweisung

R ist eine dynamisch typisierte Sprache, daher ist es im Allgemeinen nicht nötig, den Typ einer Variable anzugeben. Der Standardtyp ist numeric, der üblicherweise als Gleitkommazahl mit doppelter Genauigkeit umgesetzt wird. Um die Verwendung von 32-Bit-Ganzzahlen zu erzwingen, verwende ein L-Suffix (Abkürzung für Long).

Den „Typ“ eines Objekts zu ermitteln, ist (aus historischen Gründen) möglicherweise verwirrend. Die Funktionen typeof() und class() sind ähnlich, können aber leicht unterschiedliche Ergebnisse liefern:

typeof(50)
#> [1] "double"  # more specific: an implementation detail
typeof(50L)
##> [1] "integer"

class(50)
#> [1] "numeric"  # less specific: ignores implementation details
class(50L)
#> [1] "integer"
Advanced

Du könntest auch auf Verweise zu mode() stoßen, das typeof() ähnlich ist.

Bitte ignoriere mode() und storage.mode(). Sie sind nur aus Gründen der Abwärtskompatibilität vorhanden.

Der bevorzugte Zuweisungsoperator ist <-. Wenn du in RStudio arbeitest, kannst du ihn mit dem Tastenkürzel Alt-minus eingeben.

x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"

= statt <- zu verwenden, funktioniert oft, aber nicht immer, und gilt als schlechter Stil.

Operatoren sind denen vieler anderer Sprachen meist ähnlich, allerdings sind %% und %/% ungewöhnlicher. Diese %-Syntax ist eine Möglichkeit, Infix-Operatoren aufzurufen, die als Makros implementiert sind.

2 + 3   # 5
2 - 3   # -1
2 * 3   # 6
2 / 3   # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3  # 2 (remainder)
2 ^ 3   # 8 (exponential)

In R beginnt # einen einzeiligen Kommentar. Für mehrzeilige Kommentare gibt es keine eigene Syntax.

Funktionen

So definierst du eine Funktion:

squareit <- function(x) {
    x * x
}

Funktionen können null oder mehr Argumente haben, die durch Kommas getrennt werden. Die zwei runden Klammern () sind bei function() nötig, auch wenn es keine Parameter gibt.

Für Funktionsargumente kannst du Standardwerte angeben, diese müssen jedoch nach allen Argumenten ohne Standardwert stehen, und du weist den Standardwert mit = zu, nicht mit <-. Als ziemlich sinnloses Beispiel:

squareit <- function(x = 42) {
    x * x
}

squareit()
#> [1] 1764

Die geschweiften Klammern { } sind bei einzeiligen Funktionskörpern nicht zwingend erforderlich, aber sie einzufügen gilt als guter Stil.

R gibt automatisch den letzten Wert einer Funktion zurück, wie in den Beispielen oben.

Mit return() kannst du überall im Funktionskörper einen Rückgabewert explizit machen. Es gibt den angegebenen Wert sofort zurück und beendet die Funktion, ohne dass noch einer der übrigen Ausdrücke im Funktionskörper ausgeführt wird.

Ein expliziter Aufruf von return() ist meist nur nötig, wenn du die Funktion vorzeitig verlassen und aus irgendeinem Grund einen bestimmten Wert zurückgeben willst. Ein Beispiel dafür könnte eine if-else-Anweisung sein.

Manche Entwickler bevorzugen aus Stilgründen jedoch explizite Rückgaben.

Eine Funktion aufzurufen funktioniert wie in vielen anderen Sprachen:

squareit(3)
#> [1] 9

In späteren Konzepten werden wir sehen, dass das Ergebnis 9 tatsächlich ein Vektor der Länge 1 ist und keine skalare Zahl. Daher die Angabe [1], die anzeigt, dass dies der Anfang des Vektors ist.

is.vector(9)
#> [1] TRUE

Die meisten Dinge in R sind irgendeine Art von Vektor!

Note

Die R-Konsole würde das obige Beispiel so anzeigen:

> squareit(3)
[1] 9

Dokumente in diesem Lehrplan folgen meist der Konvention aus mehreren R-Lehrbüchern: Der Prompt wird entfernt und das Ergebnis auskommentiert. Dadurch lassen sich Codebeispiele einfacher in die Konsole kopieren, einfügen und ausführen.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne Grundlagen