Suche…


Benannte Funktionen

R ist voll mit Funktionen, es ist immerhin eine funktionale Programmiersprache , aber manchmal ist die genaue Funktion, die Sie benötigen, nicht in den Basisressourcen enthalten. Es ist denkbar, dass Sie ein Paket installieren, das die Funktion enthält. Vielleicht sind Ihre Anforderungen jedoch so spezifisch, dass keine vorgefertigte Funktion passt. Dann haben Sie die Möglichkeit, Ihre eigenen zu machen.

Eine Funktion kann sehr einfach sein, so dass sie ziemlich sinnlos ist. Es braucht nicht einmal ein Argument:

one <- function() { 1 }
one()
[1] 1

two <- function() { 1 + 1 }
two()
[1] 2

Zwischen den geschweiften Klammern { } ist die eigentliche Funktion. Solange Sie alles in eine einzige Zeile einfügen können, sind sie nicht unbedingt erforderlich, können aber hilfreich sein, um die Dinge in Ordnung zu halten.

Eine Funktion kann sehr einfach und dennoch sehr spezifisch sein. Diese Funktion nimmt als Eingabe einen Vektor (in diesem Beispiel vec ) und gibt den gleichen Vektor aus, wobei die Länge des Vektors (in diesem Fall 6) von jedem der Elemente des Vektors abgezogen wird.

vec <- 4:9
subtract.length <- function(x) { x - length(x) }
subtract.length(vec)
[1] -2 -1  0  1  2  3

Beachten Sie, dass length() an sich eine vorab gelieferte (dh Basis- ) Funktion ist. Sie können natürlich eine zuvor selbst erstellte Funktion innerhalb einer anderen selbst erstellten Funktion verwenden sowie Variablen zuweisen und andere Operationen ausführen, während Sie sich über mehrere Zeilen erstrecken:

vec2 <- (4:7)/2

msdf <- function(x, multiplier=4) {
    mult <- x * multiplier
    subl <- subtract.length(x)
    data.frame(mult, subl)
}

msdf(vec2, 5)
  mult subl
1 10.0 -2.0
2 12.5 -1.5
3 15.0 -1.0
4 17.5 -0.5

multiplier=4 stellt sicher, dass 4 der Standardwert des Argumentmultiplikators multiplier , wenn beim Aufruf der Funktion 4 kein Wert angegeben wird.

Die oben genannten sind Beispiele für benannte Funktionen, die einfach genannt werden, weil ihnen Namen gegeben wurden ( one , two , subtract.length usw.).

Anonyme Funktionen

Eine anonyme Funktion erhält, wie der Name schon sagt, keinen Namen. Dies kann nützlich sein, wenn die Funktion Teil einer größeren Operation ist, an sich aber nicht viel Platz einnimmt. Ein häufiger Anwendungsfall für anonyme Funktionen ist innerhalb der *apply Familie von Basisfunktionen.

Berechnen Sie den quadratischen Mittelwert für jede Spalte in einem data.frame :

df <- data.frame(first=5:9, second=(0:4)^2, third=-1:3)

apply(df, 2, function(x) { sqrt(sum(x^2)) })
    first    second     third 
15.968719 18.814888  3.872983 

Erstellen Sie eine Sequenz von Schrittlänge eins vom kleinsten zum größten Wert für jede Zeile in einer Matrix.

x <- sample(1:6, 12, replace=TRUE)
mat <- matrix(x, nrow=3)

apply(mat, 1, function(x) { seq(min(x), max(x)) })

Eine anonyme Funktion kann auch für sich alleine stehen:

(function() { 1 })()
[1] 1

ist äquivalent zu

f <- function() { 1 })
f()
[1] 1

RStudio-Codeausschnitte

Dies ist nur ein kleiner Hack für diejenigen, die oft selbst definierte Funktionen verwenden.
Geben Sie "fun" RStudio IDE ein und drücken Sie TAB.

Geben Sie hier die Bildbeschreibung ein

Das Ergebnis wird ein Skelett einer neuen Funktion sein.

name <- function(variables) {
        
}

Man kann leicht eine eigene Snippet-Vorlage definieren, dh wie die folgende

name <- function(df, x, y) {
        require(tidyverse)
        out <- 
        return(out)
}

Die Option ist Edit Snippets im Menü Global Options -> Code .

Spaltennamen als Argument einer Funktion übergeben

Manchmal möchte man Namen von Spalten aus einem Datenrahmen an eine Funktion übergeben. Sie können als Strings bereitgestellt und in einer Funktion mit [[ . Schauen wir uns das folgende Beispiel an, das die Grundstatistiken der ausgewählten Variablen in der R-Konsole ausgibt:

basic.stats <- function(dset, vars){
    for(i in 1:length(vars)){
        print(vars[i])
        print(summary(dset[[vars[i]]]))
    }
}

basic.stats(iris, c("Sepal.Length", "Petal.Width"))

Als Ergebnis der Ausführung des angegebenen Codes werden die Namen der ausgewählten Variablen und ihre grundlegenden Zusammenfassungsstatistiken (Minima, erste Quantile, Mittelwerte, Mittelwerte, dritte Quantile und Maxima) in der R-Konsole gedruckt. Der Code dset[[vars[i]]] wählt das i-te Element aus den Argumenten vars und wählt eine entsprechende Spalte im deklarierten Eingabedatensatz dset . Wenn Sie beispielsweise iris[["Sepal.Length"]] Sepal.Length Spalte Sepal.Length aus dem iris Datensatz als Vektor Sepal.Length .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow