Vektor-Slicing und Indizierung
Teil des Abschnitts Grundlagen der R-Journey von Coddy — Lektion 67 von 78.
Sie haben gelernt, wie man auf einzelne Elemente zugreift und über Vektoren iteriert. Lassen Sie uns nun untersuchen, wie man mit Hilfe von Slicing mehrere Elemente gleichzeitig extrahiert. Diese Technik ermöglicht es Ihnen, eine Teilmenge eines Vektors in einer einzigen Operation abzurufen.
Um mehrere Elemente zu extrahieren, übergeben Sie einen Vektor von Indizes innerhalb der eckigen Klammern:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Ausgabe:
[1] 10 30 50Sie können auch den Doppelpunkt-Operator verwenden, um einen Bereich aufeinanderfolgender Elemente auszuwählen:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Ausgabe:
[1] 20 30 40Negative Indizes sind in R sehr mächtig. Sie schließen Elemente aus, anstatt sie auszuwählen:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Ausgabe:
[1] 10 30 40 50Sie können mehrere Elemente ausschließen, indem Sie einen Vektor mit negativen Indizes übergeben:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Ausgabe:
[1] 20 30 40Denken Sie daran: Sie können positive und negative Indizes nicht in derselben Auswahl mischen. R wird einen Fehler ausgeben, wenn Sie versuchen numbers[c(1, -2)].
Aufgabe
EinfachSie erhalten zwei Eingabezeilen:
- Eine durch Kommas getrennte Liste von Zahlen (z. B.
100,200,300,400,500,600,700) - Zwei durch ein Komma getrennte Indizes, die einen auszuschließenden Bereich darstellen (z. B.
2,5)
Führen Sie die folgenden Operationen aus:
- Erstellen Sie einen numerischen Vektor aus den durch Kommas getrennten Zahlen
- Geben Sie die Elemente an den Positionen 1, 3 und 5 unter Verwendung eines Vektors von Indizes aus
- Geben Sie die Elemente von Position 2 bis Position 4 unter Verwendung des Doppelpunkt-Operators aus
- Geben Sie den Vektor aus, wobei das Element am ersten angegebenen Index ausgeschlossen wird (unter Verwendung negativer Indizierung)
- Geben Sie den Vektor aus, wobei die Elemente vom ersten bis zum zweiten Index ausgeschlossen werden (unter Verwendung negativer Indizierung mit einem Bereich)
Wenn die Eingaben zum Beispiel wie folgt lauten:
10,20,30,40,50,60,70
3,5Die Ausgabe sollte wie folgt aussehen:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Erklärung:
- Die Elemente an den Positionen 1, 3, 5 sind: 10, 30, 50
- Die Elemente von Position 2 bis 4 sind: 20, 30, 40
- Das Ausschließen von Position 3 ergibt: 10, 20, 40, 50, 60, 70
- Das Ausschließen der Positionen 3 bis 5 ergibt: 10, 20, 60, 70
Spickzettel
Um mehrere Elemente aus einem Vektor zu extrahieren, übergeben Sie einen Vektor von Indizes in eckigen Klammern:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50Verwenden Sie den Doppelpunkt-Operator, um einen Bereich aufeinanderfolgender Elemente auszuwählen:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40Negative Indizes schließen Elemente aus, anstatt sie auszuwählen:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2]) # [1] 10 30 40 50Schließen Sie mehrere Elemente aus, indem Sie einen Vektor mit negativen Indizes übergeben:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)]) # [1] 20 30 40Wichtig: Sie können positive und negative Indizes nicht in derselben Auswahl mischen.
Probier es selbst
# Eingabe lesen
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Die durch Kommas getrennten Zahlen in einen numerischen Vektor umwandeln
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Die zwei Indizes parsen
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Schreiben Sie Ihren Code unten
# 1. Elemente an den Positionen 1, 3 und 5 mit einem Vektor von Indizes ausgeben
# 2. Elemente von Position 2 bis Position 4 mit dem Doppelpunkt-Operator ausgeben
# 3. Den Vektor ohne das Element an idx1 ausgeben (negative Indizierung)
# 4. Den Vektor ohne die Elemente von idx1 bis idx2 ausgeben (negative Indizierung mit Bereich)Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Operatoren Teil 2
Logische Operatoren (AND, OR)Logische Operatoren Teil 2 (NOT)Wiederholung – Einfache LogikVektorisierte Logik Teil 1Vektorisierte Logik Teil 27Rechnungs-Split-Rechner
WillkommensnachrichtBenutzereingaben abfragen10FizzBuzz mit einer Besonderheit
SpielübersichtDie FizzBuzz-Funktion13Vektoren für Fortgeschrittene
Vektor-Slicing und IndizierungLogische IndizierungVektorarithmetik & RecyclingDer %in%-Operator2Variablen und Datentypen
Numerischer DatentypGanzzahl-DatentypZeichen-DatentypLogischer DatentypDatentypen prüfenBenennungskonventionenFehlende Werte: NAZusammenfassung – Variablenerstellung5Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher TaschenrechnerVerschachteltes If - Else8Schleifen
For-SchleifeWhile-SchleifeBreakNext (Continue)Rückblick - FakultätSequenzgenerierung (seq, :)Verschachtelte SchleifenRückblick - Dynamische Eingabe3Operatoren Teil 1
Arithmetische OperatorenGanzzahlige Division und ModuloZuweisungsoperatorenWiederholung - Einfache MathematikVergleichsoperatoren6Grundlagen der Ein- und Ausgabe
Print-AusgabeCat zur AusgabeAusgabe mit VariablenEingabe lesen mit readline()Grundlagen der TypumwandlungWiederholung – AltersrechnerWiederholung – Wahr oder Falsch9Funktionen
Funktionen deklarierenFunktionsargumenteRückgabewerteWiederholung - Sigma-FunktionWiederholung - ValidierungsfunktionStandard-Parameterwerte