Datentypen in R mit Beispiel

โšก Intelligente Zusammenfassung

Datentypen in R definieren, wie Werte im Speicher abgelegt werden, und Operatoren legen fest, was R mit ihnen tun kann. Vektoren, Variablen, arithmetische, relationale, logische und Zuweisungsoperatoren werden hier anhand von ausfรผhrbaren Beispielen behandelt.

  • ๐Ÿ”˜ AtomIC-Typen: In R werden alle Werte als logisch, ganzzahlig, doppelt, komplex, Zeichen oder Rohwert gespeichert.
  • โ˜‘๏ธ Typprรผfung: class(), typeof() und mode() beschreiben einen Wert aus drei verschiedenen Blickwinkeln.
  • โœ… Vektoren: Die Funktion c() erstellt eine eindimensionale Sammlung, in der alle Elemente vom selben Typ sind.
  • ๐Ÿงช OperaTore: Arithmetische, relationale, logische und Zuweisungsoperatoren decken nahezu jeden Basisausdruck von R ab.
  • ๏ธ Teilmengenbildung: Eckige Klammern in Kombination mit einer logischen Bedingung filtern Vektorelemente in einer einzigen Zeile.
  • โš ๏ธ Versionshinweis: R 4.3.0 wandelte ein Argument, dessen Lรคnge grรถรŸer als eins war, in && oder || in einen Fehler um.

Datentypen in R

Was sind die Datentypen in R?

Im Folgenden sind die Datentypen oder Datenstrukturen in der R-Programmierung aufgefรผhrt:

Diese Liste vermischt zwei verwandte Ideen; durch deren Trennung wird der Rest dieser Seite รผbersichtlicher. Datentyp Beschreibt, was ein einzelner Wert ist โ€“ eine Zahl, ein Textabschnitt, ein WAHR oder ein FALSCH. Datenstruktur Beschreibt, wie viele Werte zusammengefasst sind und welche Form sie haben. Skalare, Vektoren, Matrizen, Dataframes und Listen sind Strukturen; die darin enthaltenen Werte gehรถren dennoch zu einem der grundlegenden Datentypen von R.

Struktur Abmessungen Gemischte Typen erlaubt? Typische Verwendung
Scalar Vektor der Lรคnge 1 Nein Eine einzelne Messung oder Flagge
Vector 1 Nein Eine Spalte mit Messwerten eines Typs
Matrix 2 Nein Numerische Gitter und lineare Algebra
Datenrahmen 2 Ja, ein Typ pro Spalte Tabellarische Datensรคtze
Liste 1, aber verschachtelbar Ja, alles pro Element. Modellergebnisse und gemischte Behรคlter

R kennt keinen separaten Skalar-Typ: Ein Skalar ist einfach ein Vektor der Lรคnge eins, weshalb so viel R-Code fรผr ganze Vektoren auf einmal geschrieben wird.

Grundlegende Datentypen in R

Jeder Wert in R gehรถrt zu einem von wenigen Basistypen (atomaren Typen):

  • 4.5 ist ein Dezimalwert, der als numerisch bezeichnet wird.
  • 4 sieht zwar aus wie eine ganze Zahl, aber R speichert sie trotzdem als Gleitkommazahl. Schreiben Sie 4L, wenn eine echte ganze Zahl benรถtigt wird.
  • WAHR oder FALSCH ist ein boolescher Wert, in R als logischer Wert bezeichnet.
  • Der Wert innerhalb von "" oder ' ' ist Text (eine Zeichenkette). Diese Werte werden Zeichen genannt.

Zwei weitere Typen vervollstรคndigen die Menge. Komplexe Werte wie 3 + 2i enthalten einen Real- und einen Imaginรคrteil, und Rohwerte enthalten Bytes. Beide kommen in der alltรคglichen Datenanalyse selten vor, sind aber in der Basis R aufgefรผhrt. typeof()-Dokumentation neben den vier gรคngigen Typen.

Typ Beispielwert class() gibt zurรผck typeof() gibt zurรผck
logisch TRUE logisch logisch
ganze Zahl 4L ganze Zahl ganze Zahl
Double (numerisch) 4.5 numerisch doppelt
Charakter "R ist fantastisch" Charakter Charakter
Complex 3+2i Komplex Komplex
Roh as.raw(10) roh roh

Mit der Klassenfunktion kรถnnen wir den Typ einer Variablen รผberprรผfen.

Beispiel 1: รœberprรผfung einer numerischen Variable

# Declare variables of different types
# Numeric
x <- 28
class(x)

Ausgang:

## [1] "numeric"

Beispiel 2: รœberprรผfen einer Zeichenvariablen

# String
y <- "R is Fantastic"
class(y)

Ausgang:

## [1] "character"

Beispiel 3: รœberprรผfung einer logischen Variable

# Boolean
z <- TRUE
class(z)

Ausgang:

## [1] "logical"

Beachten Sie, dass `class()` fรผr 28 โ€žnumerischโ€œ zurรผckgibt, obwohl 28 keine Nachkommastellen hat. R speichert den Wert als Gleitkommazahl (double), und nur `typeof()` zeigt dies an. Der nรคchste wichtige Unterschied betrifft die Benennung dieser Werte.

Variablen in R

Variablen gehรถren zu den grundlegenden Bausteinen in R, die Werte speichern, und sind fรผr jeden, der im Bereich Data Science arbeitet, von Bedeutung. Eine Variable in R kann eine Zahl, ein Objekt, ein statistisches Ergebnis, einen Vektor, einen Datensatz oder eine Modellvorhersage speichern โ€“ im Grunde alles, was R ausgibt. Wir kรถnnen diese Variable spรคter einfach durch Aufruf ihres Namens verwenden.

Um in R eine Variable zu deklarieren, muss ihr ein Name zugewiesen werden. Dieser Name darf keine Leerzeichen enthalten. Zwei Wรถrter kรถnnen mit einem Unterstrich (_) verbunden werden.

Variablennamen dรผrfen Buchstaben, Ziffern, Punkte und Unterstriche enthalten, mรผssen aber mit einem Buchstaben oder einem Punkt beginnen. Reservierte Wรถrter wie TRUE, FALSE und NULL sind als Namen nicht zulรคssig. Um einer Variablen einen Wert zuzuweisen, verwenden Sie <- oder =.

Hier ist die Syntax:

# First way to declare a variable:  use the `<-`
name_of_variable <- value
# Second way to declare a variable:  use the `=`
name_of_variable = value

In die Befehlszeile kรถnnen wir die folgenden Codes schreiben, um zu sehen, was passiert:

Beispiel 1: Einen Wert zuweisen und ausgeben

# Print variable x
x <- 42
x

Ausgang:

## [1] 42

Beispiel 2: Eine zweite Variable deklarieren

y  <- 10
y

Ausgang:

## [1] 10

Beispiel 3: Zwei Variablen in einem Ausdruck verwenden

# We call x and y and apply a subtraction
x-y

Ausgang:

## [1] 32

Eine Variable, die mehrere Werte vom gleichen Typ enthรคlt, ist ein Vektor. Dies ist die Struktur, die fast jede R-Funktion erwartet.

Vektoren in R

Ein Vektor ist eine eindimensionale Sammlung, deren Elemente alle vom gleichen Typ sind. Wir kรถnnen einen Vektor mit allen grundlegenden R-Datentypen erstellen, die wir bereits kennengelernt haben. Am einfachsten lรคsst sich ein Vektor in R mit der Funktion `c()` erstellen.

Beispiel 1: Erstellen eines numerischen Vektors

# Numerical
vec_num <- c(1, 10, 49)
vec_num

Ausgang:

## [1]  1 10 49

Beispiel 2: Erstellen eines Zeichenvektors

# Character 
vec_chr <- c("a", "b", "c")
vec_chr

Ausgang:

## [1] "a" "b" "c"

Beispiel 3: Erstellen eines logischen Vektors

# Boolean 
vec_bool <-  c(TRUE, FALSE, TRUE)
vec_bool

Ausgang:

##[1] TRUE FALSE TRUE

Wenn c() verschiedene Datentypen empfรคngt, schlรคgt die Funktion nicht fehl. Sie wandelt jedes Element stillschweigend in den allgemeinsten vorhandenen Datentyp um, sodass c(1, "a", TRUE) zu einem Zeichenvektor wird. In R sind auch arithmetische Berechnungen mit Vektoren mรถglich.

Beispiel 4: Zwei Vektoren elementweise addieren

# Create the vectors
vect_1 <- c(1, 3, 5)
vect_2 <- c(2, 4, 6)
# Take the sum of A_vector and B_vector
sum_vect <- vect_1 + vect_2
# Print out total_vector
sum_vect

Ausgang:

[1]  3  7 11

Die Addition erfolgte elementweise, da beide Vektoren die gleiche Lรคnge haben. Bei unterschiedlichen Lรคngen verwendet R den kรผrzeren Vektor erneut, bis er mit dem lรคngeren รผbereinstimmt, und gibt nur dann eine Warnung aus, wenn die Lรคnge des lรคngeren Vektors kein Vielfaches der kรผrzeren ist.

Beispiel 5: Die ersten fรผnf Elemente aufteilen

In R ist es mรถglich, einen Vektor zu segmentieren. Manchmal sind wir nur an den ersten fรผnf Elementen eines Vektors interessiert. Wir kรถnnen den Befehl [1:5] verwenden, um diese Segmente zu extrahieren.tract die Werte 1 bis 5.

# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]

Ausgang:

## [1] 1 2 3 4 5

Beispiel 6: Erstellen eines Bereichs mit dem Doppelpunkt OperaDo.

Die kรผrzeste Methode, einen Wertebereich zu erstellen, ist die Verwendung des Doppelpunktoperators (:) zwischen zwei Zahlen. Beispielsweise kรถnnen wir im obigen Beispiel c(1:10) schreiben, um einen Vektor mit den Werten von eins bis zehn zu erzeugen.

# Faster way to create adjacent values
c(1:10)

Ausgang:

## [1]  1  2  3  4  5  6  7  8  9 10

Da sich der Typ eines Vektors beim Mischen stillschweigend รคndert, lohnt es sich, zu wissen, wie man Typen bei Bedarf รผberprรผft und konvertiert.

Wie man Datentypen in R prรผft und konvertiert

Drei Funktionsfamilien beantworten die drei immer wiederkehrenden Fragen: Was ist das? Ist das ein vorgegebener Typ? Und kann das zu einem anderen Typ werden?

Funktionsfamilie Fragen, die es beantwortet Beispiele
class(), typeof(), mode() Um welchen Datentyp handelt es sich bei diesem Wert? class(28), typeof(28), mode(28)
Ist.*() Ist dieser Wert vom Typ X? is.numeric(), is.character(), is.logical()
als.*() Kann dieser Wert vom Typ X werden? as.numeric(), as.character(), as.integer()
str () Wie sieht dieses Objekt insgesamt aus? str(vec_num)
# Three different views of the same value
x <- 28
class(x)      # "numeric"  -- the class used for method dispatch
typeof(x)     # "double"   -- how R stores the value internally
mode(x)       # "numeric"  -- the older S-style mode

# Ask a yes/no question about a type
is.numeric(x)     # TRUE
is.character(x)   # FALSE

# Convert between types
as.character(x)   # "28"
as.integer("28")  # 28 stored as an integer
as.numeric("abc") # NA, with a coercion warning

Zwei Regeln erklรคren die meisten รœberraschungen hier. Erstens: `class()` gibt die fรผr die Methodenaufrufe verwendete Klasse zurรผck, wรคhrend `typeof()` den internen Speicher zurรผckgibt. Daher ist 28 fรผr den einen Typ โ€žnumerischโ€œ und fรผr den anderen โ€ždoubleโ€œ. Zweitens: Eine fehlgeschlagene Konvertierung fรผhrt nicht zum Abbruch des Skripts: `as.numeric("abc")` gibt NA zurรผck und gibt eine Typumwandlungswarnung aus. Daher deuten stille NA-Werte nach einem Import fast immer auf ein Typproblem hin. Dieselbe Logik treibt โ€ฆ Faktoren, die Kategorien als ganzzahlige Codes plus eine Tabelle von Stufen speichern.

Nachdem die Datentypen festgelegt sind, geht es als nรคchstes um die Operatoren, die auf diese Datentypen angewendet werden.

R Arithmetik Operatoren

Zunรคchst betrachten wir die grundlegenden arithmetischen Operatoren in R. Im Folgenden sind die arithmetischen Operatoren in der R-Programmierung und ihre Bedeutung aufgefรผhrt:

OperaDo. Beschreibung
+ Zusatz
- SubtracProduktion
* Vervielfรคltigen
/ Anwendungen
^ oder ** Potenzierung
%% Modulo (Rest nach der Division)
%/% Ganzzahldivision (Quotient, Rest verworfen)

Jeder dieser Operatoren ist vektorisiert, sodass derselbe Ausdruck sowohl auf einen einzelnen Wert als auch auf eine ganze Spalte angewendet werden kann.

Beispiel 1: Addition

# An addition
3 + 4

Ausgang:

## [1] 7

Sie kรถnnen den obigen R-Code einfach kopieren und einfรผgen in den RStudio Konsole. In diesem Artikel wird die Ausgabe in Zeilen angezeigt, die mit ## beginnen. Wenn wir beispielsweise den Code print(" schreibenGuru99") gibt die Konsole [1] aus.Guru99", was auf dieser Seite als ## [1] angezeigt wรผrde.Guru99. "

Das ## kennzeichnet eine Zeile der gedruckten Ausgabe, und die Zahl in der eckigen Klammer ([1]) ist der Index des ersten Wertes in dieser Zeile und nicht Teil des Ergebnisses.

Sรคtze, die mit # beginnen, sind Kommentare. Wir kรถnnen # innerhalb eines R-Skripts verwenden, um beliebige Anmerkungen hinzuzufรผgen, und R ignoriert diese zur Laufzeit.

Beispiel 2: Multiplikation

# A multiplication
3*5

Ausgang:

## [1] 15

Beispiel 3: Division

# A division
(5+5)/2

Ausgang:

## [1] 5

Beispiel 4: Potenzierung

# Exponentiation
2^5

Ausgang:

## [1] 32

Beispiel 5: Modulo

# Modulo
28%%6

Ausgang:

## [1] 4

Arithmetische Operationen erzeugen Zahlen. Die nรคchste Gruppe von Operatoren erzeugt stattdessen WAHR und FALSCH.

R Relational (Comparative) Operatoren

Relationale Operatoren vergleichen zwei Werte und geben ein logisches Ergebnis zurรผck. Sie sind die Operatoren, die die fรผr die Filterung verwendeten Bedingungen erstellen, und sie werden auf genau die gleiche Weise vektorisiert wie die arithmetischen Operatoren.

OperaDo. Beschreibung
> GrรถรŸer als
< Less als
>= GrรถรŸer als oder gleich wie
<= Less als oder gleich
== Genau gleich
!= Nicht gleichzusetzen mit
a <- 10
b <- 3

a > b     # TRUE
a < b     # FALSE
a >= 10   # TRUE
a <= 3    # FALSE
a == b    # FALSE
a != b    # TRUE

# Relational operators are vectorised
scores <- c(45, 78, 90, 62)
scores >= 60   # FALSE TRUE TRUE TRUE

Zwei Gewohnheiten sparen hier Zeit. Verwenden Sie == fรผr Vergleiche und <- fรผr Zuweisungen, da ein einzelnes = innerhalb einer Bedingung ein hรคufiger Anfรคngerfehler ist. Vermeiden Sie auรŸerdem == bei Gleitkommazahlen: Durch die Rundung von Gleitkommazahlen ist 0.1 + 0.2 == 0.3 FALSE, daher ist isTRUE(all.equal(0.1 + 0.2, 0.3)) die sichere Methode. Vergleiche auf sortierte Datenrahmen Befolgen Sie die gleichen Regeln.

R Logisch Operatoren

Mithilfe logischer Operatoren mรถchten wir Werte innerhalb eines Vektors basierend auf logischen Bedingungen zurรผckgeben. Die folgende Tabelle listet die in R verfรผgbaren logischen Operatoren auf.

Referenztabelle der logischen und relationalen Operatoren in R mit ihren Bedeutungen

Logische Anweisungen in R werden in eckige Klammern [] eingeschlossen. Wir kรถnnen beliebig viele bedingte Anweisungen hinzufรผgen, diese mรผssen jedoch in Klammern gesetzt werden. Eine bedingte Anweisung kann folgendermaรŸen aufgebaut sein:

variable_name[(conditional_statement)]

Mit `variable_name` bezeichnen wir die Variable, die wir fรผr die Anweisung verwenden mรถchten. Wir erstellen die logische Anweisung, zum Beispiel `variable_name > 0`. AbschlieรŸend setzen wir die eckigen Klammern, um die logische Anweisung abzuschlieรŸen. Nachfolgend finden Sie ein Beispiel fรผr eine logische Anweisung.

Beispiel 1: Vergleich jedes Elements eines Vektors

# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5

Ausgang:

## [1]FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

In der obigen Ausgabe liest R jeden Wert und vergleicht ihn mit der Bedingung `logical_vector>5`. Ist der Wert grรถรŸer als fรผnf, ist die Bedingung WAHR, andernfalls FALSCH. R gibt einen Vektor mit den Werten WAHR und FALSCH zurรผck.

Beispiel 2: Nur die passenden Elemente behalten

Im folgenden Beispiel mรถchten wir extracWir wรคhlen die Werte aus, die die Bedingung โ€žist strikt grรถรŸer als fรผnfโ€œ erfรผllen. Dazu setzen wir die Bedingung in eckige Klammern, denen der Vektor mit den Werten vorangestellt wird.

# Print value strictly above 5
logical_vector[(logical_vector>5)]

Ausgang:

## [1]  6  7  8  9 10

Beispiel 3: Zwei Bedingungen kombinieren

# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]

Ausgang:

## [1] 5 6

Beispiel 3 verwendet absichtlich das einzelne kaufmรคnnische Und-Zeichen (&). Die einstelligen Operatoren & und | vergleichen Vektoren elementweise und geben einen Vektor zurรผck, was fรผr die Teilmengenbildung erforderlich ist. Die doppelten Formen && und || geben einen Wert zurรผck und gehรถren in if()- und while()-Bedingungen. R4.3.0Die รœbergabe eines Arguments mit mehr als einem Element an && oder || fรผhrt zu einem Fehler und nicht zu einer Warnung; daher sind die beiden Operatorfamilien nicht mehr austauschbar. Der !-Operator negiert eine Bedingung, und xor() fรผhrt ein exklusives ODER durch.

R-Zuweisung Operatoren

Zuweisungsoperatoren binden einen Wert an einen Namen. R bietet mehr davon als die meisten anderen Sprachen, und die Unterschiede spielen eine Rolle, sobald der Code in die Syntax verschoben wird. Funktionen.

OperaDo. Beschreibung
<- Linke Zuweisung, die idiomatische Wahl in R
= Linkszuweisung, normalerweise aber fรผr Funktionsargumente reserviert.
-> Richtige Zuordnung, gรผltig, aber selten verwendet
<<- Superassignment, das umschlieรŸende Umgebungen durchsucht
- >> Rechte Superzuweisung
# Left assignment -- the idiomatic form
count <- 5

# Equals sign: works, but reserve it for function arguments
count = 5
round(3.14159, digits = 2)

# Right assignment
5 -> count

# Superassignment, used inside functions to reach an outer scope
count <<- 5

Stilrichtlinien empfehlen <- zum Erstellen von Objekten und = zum Benennen von Argumenten innerhalb eines Funktionsaufrufs, da die beiden Rollen so visuell unterscheidbar bleiben. Verwenden Sie <<- sparsam: Es verรคndert ein Objekt auรŸerhalb der aktuellen Funktion und erschwert das Verstรคndnis des Codes. Sobald Sie mit Zuweisungen und Typen vertraut sind, folgen die nรคchsten Schritte. Importieren von Echtzeitdaten und Reshaping es mit dplyr; das R-Sprachรผbersicht setzt die gesamte Toolkette in den Kontext.

Hรคufig gestellte Fragen

Ein Vektor enthรคlt nur Elemente eines Typs; das Mischen von Typen erfordert eine Typumwandlung. Eine Liste kann beliebige Elemente in jedem Feld speichern, einschlieรŸlich anderer Listen, Dataframes oder Funktionen. Daher sind Modellobjekte Listen.

Wenn zwei Vektoren unterschiedlicher Lรคnge auf einen Operator treffen, wiederholt R den kรผrzeren Vektor so lange, bis die Lรคngen รผbereinstimmen. c(1,2,3,4) + c(1,2) ergibt 2 4 4 6. Eine Warnung erscheint nur, wenn die lรคngere Lรคnge kein Vielfaches ist.

NA kennzeichnet einen fehlenden Wert in einem Vektor. NULL bedeutet, dass kein Objekt vorhanden ist und hat die Lรคnge null. NaN ist ein undefiniertes numerisches Ergebnis, z. B. 0/0. Inf ist die Division durch Null, z. B. 1/0.

Der Operator `%in%` prรผft die Zugehรถrigkeit und gibt fรผr jedes im rechten Vektor gefundene Element der linken Seite `TRUE` zurรผck. `c(2,7) %in% c(1,2,3)` gibt `TRUE FALSE` zurรผck. Er ersetzt lange Ketten von `==`-Vergleichen, die mit `|` verknรผpft sind.

Wรคhle ein Matrix fรผr numerische Gitter und lineare Algebra, ein Datenrahmen fรผr Tabellen, deren Spalten unterschiedliche Datentypen aufweisen, und ein Liste wenn Elemente unterschiedliche Formen haben.

Der in R 4.1.0 eingefรผhrte Operator |> รผbergibt den Wert links an das erste Argument der Funktion rechts davon. Er verkettet Schritte ohne verschachtelte Aufrufe und benรถtigt im Gegensatz zur magrittr %>% Pipe kein Paket.

KI-Assistenten kennzeichnen Typenkonflikte, schlagen as.*-Konvertierungen vor und entwerfen anhand einer Stichprobe von Zeilen Umcodierungscode. Sie schlagen auรŸerdem Schritte zur Merkmalsentwicklung vor, bevor ein Maschinelles Lernen Das Modell wurde angepasst. รœberprรผfen Sie den generierten Code immer anhand Ihrer Daten.

Ja. RStudio 2023.09.0 und spรคtere Versionen enthalten eine GitHub-Copilot Die Integration ermรถglicht die Inline-Vervollstรคndigung von R-Ausdrรผcken. Ein Copilot-Abonnement ist erforderlich, und Administratoren mรผssen es auf RStudio Server oder Posit Workbench aktivieren.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: