Vektorisierte Logik Teil 2
Teil des Abschnitts Grundlagen der R-Journey von Coddy — Lektion 21 von 78.
Genauso wie AND und OR vektorisierte Versionen haben, arbeitet auch der NOT-Operator elementweise auf Vektoren. Wenn Sie ! auf einen Vektor von logischen Werten anwenden, kehrt er jedes Element einzeln um.
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUEJedes TRUE wird zu FALSE und jedes FALSE wird zu TRUE. Dies ist besonders nützlich, wenn Sie Elemente finden möchten, die eine bestimmte Bedingung nicht erfüllen:
temperatures <- c(18, 25, 30, 15, 22)
# Finde Temperaturen, die NICHT über 20 liegen
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSESie können das vektorisierte NOT mit & und | kombinieren, um komplexe Filter zu erstellen:
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# Kann teilnehmen, wenn: Alter >= 18 ODER (unter 18 UND Erlaubnis vorhanden)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUEDenken Sie daran: Verwenden Sie einfache &, | und ! beim Arbeiten mit Vektoren und doppelte &&, || beim Vergleichen einzelner Werte.
Aufgabe
EinfachVerwenden Sie den vektorisierten NOT-Operator (!) zusammen mit & und |, um komplexe elementweise logische Bedingungen zu erstellen.
Ihnen stehen die folgenden Vektoren zur Verfügung:
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)Verwenden Sie vektorisierte logische Operatoren einschließlich des NOT-Operators, um die folgenden logischen Vektoren zu erstellen:
- Erstellen Sie einen Vektor namens
failed, derTRUEfür jeden Score speichert, der NICHT größer oder gleich 60 ist. - Erstellen Sie einen Vektor namens
absent, der das Gegenteil vonattendedspeichert (jeden Wert umkehren). - Erstellen Sie einen Vektor namens
at_risk, derTRUEfür jeden Schüler speichert, der NICHT anwesend war ODER die Hausaufgaben NICHT eingereicht hat. - Erstellen Sie einen Vektor namens
passing_but_absent, derTRUEfür jeden Schüler speichert, der einen Score größer oder gleich 60 hat UND NICHT anwesend war. - Erstellen Sie einen Vektor namens
needs_support, derTRUEfür jeden Schüler speichert, bei dem gilt: (Score ist kleiner als 50) ODER (war NICHT anwesend UND hat die Hausaufgaben NICHT eingereicht).
Verwenden Sie die Funktion print(), um failed, absent, at_risk, passing_but_absent und needs_support in genau dieser Reihenfolge anzuzeigen.
Spickzettel
Der NOT-Operator (!) arbeitet elementweise auf Vektoren und kehrt jeden logischen Wert einzeln um:
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUEVerwenden Sie !, um Elemente zu finden, die eine Bedingung nicht erfüllen:
temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSEKombinieren Sie das vektorisierte NOT mit & und | für komplexe Filter:
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# Can participate if: age >= 18 OR (under 18 AND has permission)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUEDenken Sie daran: Verwenden Sie das einfache &, | und ! für Vektoren; verwenden Sie das doppelte &&, || für Einzelwerte.
Probier es selbst
# Gegebene Vektoren
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
# TODO: Schreibe deinen Code unten
# 1. Erstelle 'failed' - TRUE für scores NICHT >= 60
# 2. Erstelle 'absent' - Gegenteil von attended
# 3. Erstelle 'at_risk' - NICHT attended ODER NICHT submitted homework
# 4. Erstelle 'passing_but_absent' - score >= 60 UND NICHT attended
# 5. Erstelle 'needs_support' - (score < 50) ODER (NICHT attended UND NICHT submitted homework)
# Ergebnisse ausgeben
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)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