Vektor-Slicing und -Indizierung
Teil des Abschnitts Grundlagen der R-Journey von Coddy. Lektion 67 von 78.
Du hast gelernt, wie man auf einzelne Elemente zugreift und Vektoren durchläuft. Sehen wir uns nun an, wie man mithilfe von Slicing mehrere Elemente gleichzeitig extrahiert. Mit dieser Technik kannst du in einer einzigen Operation eine Teilmenge eines Vektors auswählen.
Um mehrere Elemente zu extrahieren, übergib 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 50Du kannst den Doppelpunkt-Operator auch 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 leistungsstark. Sie schließen Elemente aus, anstatt sie auszuwählen:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Ausgabe:
[1] 10 30 40 50Du kannst mehrere Elemente ausschließen, indem du einen Vektor negativer Indizes übergibst:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Ausgabe:
[1] 20 30 40Denke daran: Du kannst positive und negative Indizes nicht in derselben Auswahl mischen. R gibt einen Fehler aus, wenn du numbers[c(1, -2)] ausprobierst.
Aufgabe
EinfachDu erhältst 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)
Der Startcode liest die Eingabe bereits ein und erstellt den numerischen Vektor. Gib genau vier Zeilen in dieser Reihenfolge aus:
- Gib die Elemente an den Positionen 1, 3 und 5 mithilfe eines Vektors von Indizes aus
- Gib die Elemente von Position 2 bis Position 4 mithilfe des Doppelpunktoperators aus
- Gib den Vektor aus, wobei das Element am ersten angegebenen Index ausgeschlossen wird (mithilfe negativer Indizierung)
- Gib den Vektor aus, wobei die Elemente vom ersten bis zum zweiten Index ausgeschlossen werden (mithilfe negativer Indizierung mit einem Bereich)
Wenn die Eingaben beispielsweise 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 und 5 sind: 10, 30, 50
- Die Elemente von Position 2 bis 4 sind: 20, 30, 40
- Der Ausschluss von Position 3 ergibt: 10, 20, 40, 50, 60, 70
- Der Ausschluss der Positionen 3 bis 5 ergibt: 10, 20, 60, 70
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 kommagetrennten Zahlen in einen numerischen Vektor parsen
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Die beiden Indizes parsen
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Schreibe deinen Code darunter
# 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 mit dem Element an idx1 ausgeschlossen ausgeben (negative Indizierung)
# 4. Den Vektor mit Elementen von idx1 bis idx2 ausgeschlossen 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 27Rechner zum Teilen der Rechnung
BegrüßungsnachrichtBenutzereingaben erfassen10FizzBuzz mit einer Wendung
SpielübersichtDie FizzBuzz-Funktion13Fortgeschrittene Vektoren
Vektor-Slicing und -IndizierungLogische IndizierungVektorarithmetik & RecyclingDer %in%-Operator2Variablen und Datentypen
Numerischer DatentypGanzzahliger DatentypZeichen-DatentypLogischer DatentypDatentypen überprüfenNamenskonventionenFehlende Werte: NAZusammenfassung – Variablen erstellen5Entscheidungen treffen
If-AnweisungIf - ElseWiederholung – Einfacher TaschenrechnerVerschachteltes If - Else8Schleifen
For-SchleifeWhile-SchleifeBreakNext (Continue)Wiederholung – FakultätSequenzgenerierung (seq, :)Verschachtelte SchleifenWiederholung – Dynamische Eingabe3Operatoren Teil 1
Arithmetische OperatorenGanzzahldivision und ModuloZuweisungsoperatorenRückblick – Einfache MathematikVergleichsoperatoren6Grundlegende Ein- und Ausgabe
Ausgabe mit printcat zur AusgabeAusgabe mit VariablenEingaben mit readline() lesenGrundlagen der TypkonvertierungRückblick – AltersrechnerRückblick – Wahr oder falsch9Funktionen
Eine Funktion deklarierenFunktionsargumenteRückgabewerteWiederholung – Sigma-FunktionWiederholung – ValidierungsfunktionStandardparameterwerteÜbe selbstständig: Online-R-Compiler