Funktionen in der R-Programmierung mit Beispiel

โšก Intelligente Zusammenfassung

Funktionen in R fassen eine Reihe von Anweisungen unter einem Namen zusammen, sodass eine wiederholte Aufgabe mit einem einzigen Aufruf ausgefรผhrt werden kann. Integrierte mathematische und statistische Hilfsfunktionen, benutzerdefinierte Funktionen und Umgebungsvariablen sind ebenfalls verfรผgbar.pingBedingte Argumente werden hier anhand von Beispielen erlรคutert.

  • ๐Ÿ”˜ Funktionsanatomie: Eine Funktion kombiniert einen Namen, eine optionale Argumentliste, einen Funktionskรถrper und einen optionalen Rรผckgabewert.
  • ๐Ÿงฎ Integrierte Abdeckung: R liefert neben mathematischen und statistischen Funktionen auch allgemeine Hilfsfunktionen wie diff() und length() mit.
  • ๐Ÿ“ Wiederverwendbare Skalierung: Die Funktion normalize() wandelt einen durch Kopieren und Einfรผgen erzeugten Skalierungsblock in einen einzigen wiederverwendbaren Aufruf um.
  • ๐Ÿงญ Umweltregeln: Jeder Aufruf รถffnet eine lokale Umgebung, und R lรถst einen Namen von der innersten Definition nach auรŸen auf.
  • ๐Ÿงช Bedingte Logik: Ein if/else-Zweig innerhalb von split_data() gibt entweder den Trainingsdatensatz oder den Testdatensatz zurรผck.
  • ๏ธ Namensรผbung: Durch die Benennung einer benutzerdefinierten Funktion anders als einer integrierten Funktion lassen sich maskierende und verwirrende Fehler vermeiden.

Funktionen in der R-Programmierung

Was ist eine Funktion in R?

A FunktionIn einer Programmierumgebung handelt es sich um eine Reihe von Anweisungen. Ein Programmierer erstellt eine zu vermeidende Funktion die gleiche Aufgabe wiederholen, oder reduzieren Komplexitรคt.

Eine Funktion sollte sein

  • geschrieben, um eine bestimmte Aufgabe auszufรผhren
  • kann Argumente enthalten oder auch nicht
  • einen Kรถrper enthalten
  • kann einen oder mehrere Werte zurรผckgeben, muss es aber nicht.

Ein allgemeiner Ansatz fรผr eine Funktion besteht darin, den Argumentteil als zu verwenden Eingรคnge, fรผttere die Kรถrper Teil und schlieรŸlich zurรผckgeben Mรถglichkeiten fรผr das Ausgangssignal:Die Syntax einer Funktion ist die folgende:

function (arglist)  {
  #Function body
}

R wichtige integrierte Funktionen

Es gibt viele integrierte Funktionen in R. R gleicht Ihre Eingabeparameter mit seinen Funktionsargumenten ab, entweder nach Wert oder nach Position, und fรผhrt dann den Funktionskรถrper aus. Funktionsargumente kรถnnen Standardwerte haben: Wenn Sie diese Argumente nicht angeben, nimmt R den Standardwert an.
Hinweis:
Sie kรถnnen den Quellcode einer Funktion anzeigen, indem Sie den Namen der Funktion selbst in der Konsole ausfรผhren.

Typing Ein Funktionsname ohne Klammern gibt seinen Quellcode aus, wie die folgende Konsole zeigt.

R-Konsole gibt den Quellcode einer eingebauten Funktion aus

Wir werden drei Funktionsgruppen in Aktion sehen

  • Allgemeine Funktion
  • Mathe-Funktion
  • Statistische Funktion

Allgemeine Funktionen

Wir sind bereits mit allgemeinen Funktionen wie cbind(), rbind(), range() vertraut. Sortieren()und order(). Jede dieser Funktionen hat eine spezifische Aufgabe, nimmt Argumente entgegen und gibt eine Ausgabe zurรผck. Im Folgenden sind wichtige Funktionen aufgefรผhrt, die man kennen sollte:

diff()-Funktion

Wenn du daran arbeitest Zeitfolgen, Sie mรผssen die Serie stationรคr gestalten, indem Sie sie nehmen Verzรถgerungswerteherunterzuladen. Ein stationรคrer Prozess Die Verwendung von diff() ermรถglicht die Annahme eines konstanten Mittelwerts, einer konstanten Varianz und einer konstanten Autokorrelation รผber die Zeit. Dies verbessert die Vorhersagegenauigkeit einer Zeitreihe erheblich. Dazu kann die diff()-Funktion verwendet werden. Man kann eine zufรคllige Zeitreihe mit einem Trend erstellen und diese anschlieรŸend mithilfe der diff()-Funktion stationรคr machen. Die diff()-Funktion akzeptiert ein Argument, einen Vektor, und gibt die entsprechende verzรถgerte und iterierte Differenz zurรผck.

HinweisWir mรผssen hรคufig Zufallsdaten erzeugen, aber fรผr Lern- und Vergleichszwecke ist es wichtig, dass die Zahlen auf allen Rechnern identisch sind. Um sicherzustellen, dass alle Rechner dieselben Daten generieren, verwenden wir die Funktion `set.seed()` mit dem Wert 123. `set.seed()` legt den Startwert des Pseudozufallszahlengenerators fest, sodass jeder Rechner dieselbe Sequenz erzeugt. Ohne `set.seed()` liefert jeder Durchlauf eine andere Sequenz.

set.seed(123)
## Create the data
x = rnorm(1000)
ts <- cumsum(x)
## Stationary the serie
diff_ts <- diff(ts)
par(mfrow=c(1,2))
## Plot the series
plot(ts, type='l')
plot(diff(ts), type='l')

In den beiden folgenden Diagrammen wird die ursprรผngliche kumulative Reihe neben die differenzierte Reihe gestellt, die nun um einen konstanten Mittelwert schwankt.

Ursprรผngliche kumulative Reihe neben der differenzierten stationรคren Reihe

length()-Funktion

In vielen Fรคllen benรถtigen wir die Lรคnge eines Vektors fรผr Berechnungen oder zur Verwendung in einer for-Schleife. Die Funktion `length()` zรคhlt die Anzahl der Zeilen im Vektor `x`. Die folgenden Codebeispiele importieren den Datensatz `cars` und geben die Anzahl der Zeilen zurรผck.

HinweisDie Funktion `length()` gibt die Anzahl der Elemente in einem Vektor zurรผck. Wenn die Funktion an einen Vektor รผbergeben wird, ... Matrix Bei einem Datenrahmen wird die Anzahl der Spalten zurรผckgegeben.

dt <- cars
## number columns
length(dt)

Ausgang:

## [1] 1
## number rows
length(dt[,1])

Ausgang:

## [1] 50

Mathematische Funktionen

รœber die allgemeinen Hilfsfunktionen hinaus verfรผgt R รผber eine Reihe mathematischer Funktionen, die elementweise auf einen Vektor angewendet werden.

OperaDo. Beschreibung
abs (x) Nimmt den Absolutwert von x
log(x,base=y) Nimmt den Logarithmus von x mit der Basis y; Wenn Basis nicht angegeben ist, wird der natรผrliche Logarithmus zurรผckgegeben
Erfahrung (x) Gibt die Exponentialfunktion von x zurรผck
sqrt (x) Gibt die Quadratwurzel von x zurรผck
Fakultรคt(x) Gibt die Fakultรคt von x (x!) zurรผck
# sequence of number from 44 to 55 both including incremented by 1
x_vector <- seq(45,55, by = 1)
#logarithm
log(x_vector)

Ausgang:

##  [1] 3.806662 3.828641 3.850148 3.871201 3.891820 3.912023 3.931826
##  [8] 3.951244 3.970292 3.988984 4.007333
#exponential
exp(x_vector)
#squared root
sqrt(x_vector)

Ausgang:

##  [1] 6.708204 6.782330 6.855655 6.928203 7.000000 7.071068 7.141428
##  [8] 7.211103 7.280110 7.348469 7.416198
#factorial
factorial(x_vector)

Ausgang:

##  [1] 1.196222e+56 5.502622e+57 2.586232e+59 1.241392e+61 6.082819e+62
##  [6] 3.041409e+64 1.551119e+66 8.065818e+67 4.274883e+69 2.308437e+71
## [11] 1.269640e+73

Statistische Funktionen

Wรคhrend mathematische Funktionen Werte transformieren, fassen statistische Funktionen sie zusammen. Die Standardinstallation von R enthรคlt eine Vielzahl statistischer Funktionen. In diesem Tutorial betrachten wir kurz die wichtigsten.

Grundlegende Statistikfunktionen

OperaDo. Beschreibung
Mittelwert(x) Mittelwert von x
Median(x) Median von x
var(x) Varianz von x
sd(x) Standardabweichung von x
MaรŸstab(x) Standardwerte (Z-Werte) von x
Quantil(x) Die Quartile von x
Zusammenfassung(x) Zusammenfassung von x: Mittelwert, Minimum, Maximum usw.
speed <- dt$speed
speed
# Mean speed of cars dataset
mean(speed)

Ausgang:

## [1] 15.4
# Median speed of cars dataset
median(speed)

Ausgang:

## [1] 15
# Variance speed of cars dataset
var(speed)

Ausgang:

## [1] 27.95918
# Standard deviation speed of cars dataset
sd(speed)

Ausgang:

## [1] 5.287644
# Standardize vector speed of cars dataset		
head(scale(speed), 5)

Ausgang:

##           [,1]
## [1,] -2.155969
## [2,] -2.155969
## [3,] -1.588609
## [4,] -1.588609
## [5,] -1.399489
# Quantile speed of cars dataset
quantile(speed)

Ausgang:

##   0%  25%  50%  75% 100%
##    4   12   15   19   25
# Summary speed of cars dataset
summary(speed)

Ausgang:

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
##     4.0    12.0    15.0    15.4    19.0    25.0

Bis zu diesem Punkt haben wir viele in R integrierte Funktionen gelernt.

HinweisSei vorsichtig mit dem Klasse des Argumentsd. h. numerisch, boolesch oder als Zeichenkette. Wenn wir beispielsweise einen Zeichenkettenwert รผbergeben mรผssen, mรผssen wir die Zeichenkette in Anfรผhrungszeichen setzen: โ€žABCโ€œ.

Funktion in R schreiben

In manchen Fรคllen mรผssen wir eine eigene Funktion schreiben, weil wir eine bestimmte Aufgabe erfรผllen mรผssen und keine fertige Funktion existiert. Eine benutzerdefinierte Funktion beinhaltet eine Name, Argumente und einem Kรถrper.

function.name <- function(arguments) 
{
    computations on the arguments	
    some other code
}		

Hinweis: Eine gute Vorgehensweise besteht darin, eine benutzerdefinierte Funktion anders zu benennen als eine integrierte Funktion. Es vermeidet Verwirrung.

Eine Argumentfunktion

Im nรคchsten Codeausschnitt definieren wir eine einfache Quadratfunktion. Die Funktion akzeptiert einen Wert und gibt das Quadrat des Werts zurรผck.

square_function<- function(n) 
{
  # compute the square of integer `n`
  n^2
}  
# calling the function and passing value 4
square_function(4)

Code Erlรคuterung

  • Die Funktion heiรŸt โ€žsquare_functionโ€œ; es kann heiรŸen, wie wir wollen.
  • Es erhรคlt ein Argument โ€žnโ€œ. Wir Der Variablentyp wurde nicht angegeben, sodass der Benutzer eine Ganzzahl, einen Vektor oder eine Matrix รผbergeben kann
  • Die Funktion nimmt die Eingabe โ€žnโ€œ und gibt das Quadrat der Eingabe zurรผck. Wenn Sie mit der Verwendung der Funktion fertig sind, kรถnnen wir sie mit der Funktion rm() entfernen.

# nachdem Sie die Funktion erstellt haben

rm(square_function)
square_function

Auf der Konsole wird die Fehlermeldung โ€žFehler: Objekt โ€žQuadratfunktionโ€œ nicht gefundenโ€œ angezeigt, die besagt, dass die Funktion nicht existiert.

Umweltbereichping

In R ist die Umwelt ist eine Sammlung von Objekten wie Funktionen, Variablen, Datenrahmen usw.

R รถffnet jedes Mal eine Umgebung, wenn RStudio gestartet wird.

Die verfรผgbare Top-Level-Umgebung ist die globale Umwelt, genannt R_GlobalEnv. Und wir haben die unmittelbare Umwelt.

Wir kรถnnen den Inhalt der aktuellen Umgebung auflisten.

ls(environment())

Ausgang

## [1] "diff_ts"         "dt"              "speed"           "square_function"
## [5] "ts"              "x"               "x_vector"

Sie kรถnnen alle in R_GlobalEnv erstellten Variablen und Funktionen sehen.

Die obige Liste kann je nach dem historischen Code, den Sie in RStudio ausfรผhren, variieren.

Beachten Sie, dass nDas Argument der Funktion square_function befindet sich nicht in dieser globalen Umgebung.

Fรผr jede Funktion wird eine neue Umgebung erstellt. Im obigen Beispiel erstellt die Funktion square_function() eine neue Umgebung innerhalb der globale Umwelt.

Um den Unterschied zwischen zu verdeutlichen globale und aus einer regionalen Umwelt, betrachten wir das folgende Beispiel

Diese Funktion nimmt einen Wert x als Argument und fรผgt ihn zu y hinzu, um auรŸerhalb und innerhalb der Funktion zu definieren

Funktion f, die die in der globalen Umgebung definierte Variable y verwendet

Die Funktion f gibt die Ausgabe 15 zurรผck. Dies liegt daran, dass y in der globalen Umgebung definiert ist. Jede in der globalen Umgebung definierte Variable kann lokal verwendet werden. Die Variable y hat bei allen Funktionsaufrufen den Wert 10 und ist jederzeit zugรคnglich.

Sehen wir uns an, was passiert, wenn die Variable y innerhalb der Funktion definiert wird.

Wir mรผssen โ€žyโ€œ lรถschen, bevor wir diesen Code mit rm r ausfรผhren kรถnnen

Funktion f, die y innerhalb ihrer eigenen lokalen Umgebung definiert

Die Ausgabe ist ebenfalls 15, wenn wir f(5) aufrufen, gibt aber einen Fehler zurรผck, wenn wir versuchen, den Wert y auszugeben. Die Variable y befindet sich nicht in der globalen Umgebung.

SchlieรŸlich verwendet R die aktuellste Variablendefinition, um sie im Hauptteil einer Funktion zu รผbergeben. Betrachten wir das folgende Beispiel:

R verwendet die innerste Definition von y innerhalb des Funktionskรถrpers

R ignoriert die auรŸerhalb der Funktion definierten y-Werte, da wir explizit jede y-Variable innerhalb des Funktionskรถrpers erstellt haben.

Funktion mit mehreren Argumenten

Wir kรถnnen eine Funktion mit mehr als einem Argument schreiben. Betrachten Sie die Funktion โ€žZeitenโ€œ. Es handelt sich um eine einfache Funktion, die zwei Variablen multipliziert.

times <- function(x,y) {
  x*y
	}
times(2,4)

Ausgang:

## [1] 8

Wann sollten wir eine Funktion schreiben?

Data Scientists mรผssen viele sich wiederholende Aufgaben erledigen. Meistens kopieren und fรผgen wir Codeabschnitte immer wieder ein. Beispielsweise ist die Normalisierung einer Variablen vor der Ausfรผhrung eines Algorithmus dringend zu empfehlen. Maschinelles Lernen Algorithmus. Die Formel zum Normalisieren einer Variablen lautet:

Formel zum Normalisieren einer Variablen

Wir wissen bereits, wie man die Funktionen min() und max() in R verwendet. Wir verwenden die Tibble-Bibliothek, um den Datenrahmen zu erstellen. Tibble ist bisher die bequemste Funktion, um einen Datensatz von Grund auf zu erstellen.

library(tibble)
# Create a data frame
data_frame <- tibble(  
  c1 = rnorm(50, 5, 1.5), 
  c2 = rnorm(50, 5, 1.5),    
  c3 = rnorm(50, 5, 1.5),    
)

Wir berechnen die oben beschriebene Funktion in zwei Schritten. Im ersten Schritt erstellen wir eine Variable namens c1_norm, die die Reskalierung von c1 darstellt. Im zweiten Schritt kopieren wir einfach den Code von c1_norm und ersetzen ihn durch c2 und c3.

Detail der Funktion mit der Spalte c1:

Nominator: : data_frame$c1 -min(data_frame$c1))

Nenner: max(data_frame$c1)-min(data_frame$c1))

Daher kรถnnen wir sie dividieren, um den normalisierten Wert von Spalte c1 zu erhalten:

(data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))

Wir kรถnnen c1_norm, c2_norm und c3_norm erstellen:

Create c1_norm: rescaling of c1		
data_frame$c1_norm <- (data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))
# show the first five values
head(data_frame$c1_norm, 5)

Ausgang:

## [1] 0.3400113 0.4198788 0.8524394 0.4925860 0.5067991

Es klappt. Wir kรถnnen kopieren und einfรผgen

data_frame$c1_norm <- (data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))

ร„ndern Sie dann c1_norm in c2_norm und c1 in c2. Wir machen dasselbe, um c3_norm zu erstellen

data_frame$c2_norm <- (data_frame$c2 - min(data_frame$c2))/(max(data_frame$c2)-min(data_frame$c2))
data_frame$c3_norm <- (data_frame$c3 - min(data_frame$c3))/(max(data_frame$c3)-min(data_frame$c3))

Wir haben die Variablen c1, c2 und c3 perfekt neu skaliert.

Diese Methode ist jedoch fehleranfรคllig. Es kann passieren, dass man beim Kopieren vergisst, den Spaltennamen nach dem Einfรผgen zu รคndern. Daher empfiehlt es sich, jedes Mal eine Funktion zu schreiben, wenn man denselben Code mehr als zweimal einfรผgen muss. Der Code kann dann in eine Formel umgewandelt und bei Bedarf aufgerufen werden. Um eine eigene Funktion zu schreiben, benรถtigt man Folgendes:

  • Name: normalize.
  • die Anzahl der Argumente: Wir benรถtigen nur ein Argument, nรคmlich die Spalte, die wir in unserer Berechnung verwenden.
  • Der Kรถrper: Das ist einfach die Formel, die wir zurรผckgeben wollen.

Wir werden Schritt fรผr Schritt vorgehen, um die Funktion normalisieren zu erstellen.

Schritt 1) Wir erstellen den Zรคhler, der x โ€“ min(x) ist. In R kรถnnen wir den Zรคhler in einer Variablen wie folgt speichern:

nominator <- x-min(x)

Schritt 2) Wir berechnen den Nenner: max(x) โ€“ min(x). Wir kรถnnen die Idee aus Schritt 1 wiederholen und die Berechnung in einer Variablen speichern:

denominator <- max(x)-min(x)

Schritt 3) Wir fรผhren die Division zwischen Nominator und Nenner durch.

normalize <- nominator/denominator

Schritt 4) Um einen Wert an die aufrufende Funktion zurรผckzugeben, mรผssen wir normalize in return() รผbergeben, um die Ausgabe der Funktion zu erhalten.

return(normalize)

Schritt 5) Wir sind bereit, die Funktion durch Umbruch zu verwenden.ping alles innerhalb der Klammer.

normalize <- function(x){
  # step 1: create the nominator
  nominator <- x-min(x)
  # step 2: create the denominator
  denominator <- max(x)-min(x)
  # step 3: divide nominator by denominator
  normalize <- nominator/denominator
  # return the value
  return(normalize)
}

Testen wir unsere Funktion mit der Variablen c1:

normalize(data_frame$c1)

Es funktioniert perfekt. Wir haben unsere erste Funktion erstellt.

Eine Funktion ist eine umfassendere Methode, um eine sich wiederholende Aufgabe auszufรผhren. Wir kรถnnen die Normalisierungsformel auf verschiedene Spalten anwenden, wie unten gezeigt:

data_frame$c1_norm_function <- normalize (data_frame$c1)
data_frame$c2_norm_function <- normalize	(data_frame$c2)
data_frame$c3_norm_function <- normalize	(data_frame$c3)

Auch wenn das Beispiel einfach ist, lรคsst sich die Leistungsfรคhigkeit einer Formel erkennen. Der obige Code ist leichter lesbar und vermeidet die Fehler, die beim Einfรผgen von Code hรคufig auftreten.

Funktionen mit Bedingung

Die Funktion `normalize()` bewirkt immer dasselbe. Manchmal mรผssen wir Bedingungen in eine Funktion einfรผgen, damit der Code unterschiedliche Ausgaben zurรผckgibt.

Bei maschinellen Lernaufgaben mรผssen wir den Datensatz in einen Zugsatz und einen Testsatz aufteilen. Der Zugsatz ermรถglicht es dem Algorithmus, aus den Daten zu lernen. Um die Leistung unseres Modells zu testen, kรถnnen wir den Testsatz verwenden, um das LeistungsmaรŸ zurรผckzugeben. R verfรผgt nicht รผber eine Funktion zum Erstellen zweier Datensรคtze. Wir kรถnnen dazu unsere eigene Funktion schreiben. Unsere Funktion benรถtigt zwei Argumente und heiรŸt split_data(). Die Idee dahinter ist einfach: Wir multiplizieren die Lรคnge des Datensatzes (dh die Anzahl der Beobachtungen) mit 0.8. Wenn wir beispielsweise den Datensatz im Verhรคltnis 80/20 aufteilen mรถchten und unser Datensatz 100 Zeilen enthรคlt, multipliziert unsere Funktion 0.8*100 = 80. 80 Zeilen werden als unsere Trainingsdaten ausgewรคhlt.

Wir werden den Luftqualitรคtsdatensatz verwenden, um unsere benutzerdefinierte Funktion zu testen. Der Luftqualitรคtsdatensatz besteht aus 153 Zeilen. Wir kรถnnen es mit dem folgenden Code sehen:

nrow(airquality)

Ausgang:

## [1] 153

Wir werden wie folgt vorgehen:

split_data <- function(df, train = TRUE)
Arguments:
-df: Define the dataset
-train: Specify if the function returns the train set or test set. By default, set to TRUE

Unsere Funktion hat zwei Argumente. Das Argument train ist ein Boolescher Parameter. Wenn es auf TRUE gesetzt ist, erstellt unsere Funktion den Trainingsdatensatz, andernfalls erstellt sie den Testdatensatz.

Wir kรถnnen genauso vorgehen wie bei der Funktion `normalize()`. Wir schreiben den Code so, als ob er nur einmalig ausgefรผhrt werden mรผsste, und schlieรŸen dann alles mit der Bedingung in den Funktionskรถrper ein, um die Funktion zu erstellen.

Schritt 1:

Wir mรผssen die Lรคnge des Datensatzes berechnen. Dies geschieht mit der Funktion nrow(). Nrow gibt die Gesamtzahl der Zeilen im Datensatz zurรผck. Wir nennen die Variable Lรคnge.

length<- nrow(airquality)
length

Ausgang:

## [1] 153

Schritt 2:

Wir multiplizieren die Lรคnge mit 0.8. Es wird die Anzahl der auszuwรคhlenden Zeilen zurรผckgegeben. Es sollte 153*0.8 = 122.4 sein

total_row <- length*0.8
total_row

Ausgang:

## [1] 122.4

Wir mรถchten 122 Zeilen aus den 153 Zeilen im Luftqualitรคtsdatensatz auswรคhlen. Wir erstellen eine Liste mit Werten von 1 bis total_row. Das Ergebnis speichern wir in der Variablen namens split

split <- 1:total_row
split[1:5]

Ausgang:

## [1] 1 2 3 4 5

Split wรคhlt die ersten 122 Zeilen aus dem Datensatz aus. Wir kรถnnen beispielsweise sehen, dass unsere Variablenaufteilung die Werte 1, 2, 3, 4, 5 usw. erfasst. Diese Werte dienen als Index, wenn wir die zurรผckzugebenden Zeilen auswรคhlen.

Schritt 3:

Wir mรผssen die Zeilen im Luftqualitรคtsdatensatz basierend auf den in der geteilten Variablen gespeicherten Werten auswรคhlen. Das geht so:

train_df <- airquality[split, ] 
head(train_df)

Ausgang:

##[1]    Ozone Solar.R Wind Temp Month Day
##[2]  51    13     137 10.3   76     6  20
##[3]  15    18      65 13.2   58     5  15
##[4]  64    32     236  9.2   81     7   3
##[5]  27    NA      NA  8.0   57     5  27
##[6]  58    NA      47 10.3   73     6  27
##[7]  44    23     148  8.0   82     6  13

Schritt 4:

Wir kรถnnen den Testdatensatz erstellen, indem wir die verbleibenden Zeilen 123:153 verwenden. Dies geschieht durch die Verwendung von โ€“ vor split.

test_df <- airquality[-split, ] 
head(test_df)

Ausgang:

##[1] Ozone Solar.R Wind Temp Month Day
##[2]  123    85     188  6.3   94     8  31
##[3]  124    96     167  6.9   91     9   1
##[4]  125    78     197  5.1   92     9   2
##[5]  126    73     183  2.8   93     9   3
##[6]  127    91     189  4.6   93     9   4
##[7]  128    47      95  7.4   87     9   5

Schritt 5:

Wir kรถnnen die Bedingung innerhalb des Funktionskรถrpers erstellen. Denken Sie daran, dass wir einen Argumentzug haben, der standardmรครŸig auf TRUE gesetzt ist, um den Zugsatz zurรผckzugeben. Um die Bedingung zu erstellen, verwenden wir die if-Syntax:

  if (train ==TRUE){ 
    train_df <- airquality[split, ] 
      return(train)		
  } else {
    test_df <- airquality[-split, ] 
      return(test)		
  }

Das ist es, wir kรถnnen die Funktion schreiben. Wir mรผssen โ€žairqualityโ€œ nur in โ€ždfโ€œ รคndern, weil wir unsere Funktion auf โ€žanyโ€œ testen mรถchten Datenrahmen, nicht nur Luftqualitรคt:

split_data <- function(df, train = TRUE){
  length<- nrow(df)
  total_row <- length *0.8
  split <- 1:total_row
  if (train ==TRUE){ 
    train_df <- df[split, ] 
      return(train_df)		
  } else {
    test_df <- df[-split, ] 
      return(test_df)		
  }
}

Probieren wir unsere Funktion am Datensatz zur Luftqualitรคt aus. Wir sollten einen Trainingsdatensatz mit 122 Zeilen und einen Testdatensatz mit 31 Zeilen haben.

train <- split_data(airquality, train = TRUE)
dim(train)

Ausgang:

## [1] 122   6
test <- split_data(airquality, train = FALSE)
dim(test)

Ausgang:

## [1] 31  6

Hรคufig gestellte Fragen

Weisen Sie der Funktion in der Definition einen Wert zu, z. B. `function(df, train = TRUE)`. Wenn der Aufrufer dieses Argument weglรคsst, verwendet R den Standardwert. Standardwerte werden verzรถgert ausgewertet, sodass ein Standardwert sich sogar auf ein anderes Argument derselben Funktion beziehen kann.

Ja. Eine Funktion kann sich selbst aufrufen, solange ein Stoppsignal vorhanden ist.ping Die Bedingung beendet die Kette โ€“ beispielsweise eine Fakultรคt, die 1 zurรผckgibt, wenn n den Wert 1 erreicht. Tiefe Rekursion kann an die Verschachtelungsgrenze von Ausdrรผcken stoรŸen, daher ist Iteration oft sicherer.

Nein. R gibt den Wert des zuletzt ausgewerteten Ausdrucks automatisch zurรผck, weshalb `square_function()` auch ohne `return()` funktioniert. Verwenden Sie `return()`, wenn ein vorzeitiger Abbruch erforderlich ist oder wenn ein explizites Ergebnis die Lesbarkeit der Funktion verbessert.

R gleicht zuerst den exakten Namen ab, dann einen Teil des Namens und schlieรŸlich die Position des verbleibenden Teils. Die explizite Benennung der Argumente, wie in seq(45, 55, by = 1), sorgt fรผr einen lesbaren Aufruf und schรผtzt vor versehentlicher Umsortierung.

Eine Funktion, die ohne Namenszuweisung erstellt wird und รผblicherweise direkt an `sapply()` oder `lapply()` รผbergeben wird. In R 4.1 wurde eine Kurzform mit Backslash eingefรผhrt, sodass `\(x) x^2` dasselbe bewirkt wie `function(x) x^2`, jedoch in deutlich kรผrzerer Zeit.ping.

Die neue Definition รผberdeckt die integrierte Funktion in dieser Umgebung, sodass beim Aufruf von `length()` Ihre Version anstelle der Basisversion ausgefรผhrt werden kรถnnte. Entfernen Sie die Kopie mit `rm()` oder wรคhlen Sie von Anfang an einen eindeutigen Namen.

KI-Assistenten erstellen Funktionsgerรผste anhand von Kommentaren in einfacher Sprache, schlagen sinnvolle Standardwerte fรผr Argumente vor und generieren Unit-Tests. Fรผhren Sie den generierten Code immer mit realen Daten aus, da eine plausibel aussehende R-Funktion dennoch unbemerkt falsche Werte zurรผckgeben kann.

Ja. RStudio Desktop 2023.09.0 und hรถher enthรคlt eine optionale Funktion. GitHub-Copilot Integration. Es vervollstรคndigt Funktionsrรผmpfe anhand eines Kommentars, aber รผberprรผfen Sie jeden Vorschlag, da es Ihre Daten nicht einsehen kann.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: