Wann sollte man Schleifen in R vermeiden?
- Wenn Aufgaben vektorisiert oder mit apply-Familie lösbar sind → höhere Effizienz und kürzerer Code/
Warum sind apply-Funktionen oft schneller als for-Schleifen?
- Intern in C implementiert → weniger Interpreter-Overhead und optimierte Speicherverwaltung/
Was ist der Unterschied zwischen apply und lapply?
- apply() für Matrizen/ Arrays mit numerischem Output / lapply() für Listen → immer Liste als Rückgabe/
Wann ist sapply() praktischer als lapply()?
- Wenn eine vereinfachte Rückgabe (Vektor/Matrix) gewünscht ist statt Liste/
Wann ist mapply() statt lapply() sinnvoll?
- Wenn mehrere Listen/Vektoren parallel iteriert werden müssen (z. B. Funktion mit zwei Argumenten)/
Wie unterscheiden sich apply-Familie und Schleifen bezüglich Lesbarkeit?
- apply-Funktionen → funktionaler, kurzer Code/ Schleifen → expliziter, leichter zu debuggen/
Warum ist Insertionsort (analog zur apply-Idee) für kleine Daten effizienter?
- Geringe Overheads, cache-freundlich, keine Rekursionskosten → ähnliche Überlegung wie bei R-apply vs. Loops/
Was zeigt Lexical Scoping praktisch?
- Funktion sucht Variablen in Definitionsumgebung → ermöglicht Closures und kontrolliertes Zugreifen auf äußere Werte/
Wie entsteht eine Closure technisch?
- Innere Funktion merkt sich Variablen aus äußerem Scope → bleiben erhalten nach Rückgabe der äußeren Funktion/
Wann nutzt man Closures praktisch?
- Für Zähler, Akkumulatoren oder Funktionsgeneratoren ohne globale Variablen/
Warum erleichtert Functional Purity das Debugging?
- Keine Seiteneffekte → Vorhersagbares Verhalten und leichte Reproduzierbarkeit/
Wie äußern sich Side Effects praktisch?
- Z. B. Globale Zuweisung <<- oder Dateischreiben → Zustand ändert sich außerhalb Funktion/
Wie kann man Side Effects vermeiden?
- Nur lokale Variablen nutzen und Rückgabewerte verwenden statt globale Zuweisungen/
Warum ist Vectorization in R so effizient?
- Operationen werden intern in C ausgeführt → Schleifen auf Interpreter-Ebene entfallen/
Wann kann Vectorization Fehler verursachen?
- Wenn Längen nicht passen → Recycling führt zu unerwarteten Ergebnissen/
Wie nutzt man debug() effektiv mit Funktionen?
- Vor Aufruf debug(fun) setzen → Funktion Schritt für Schritt durchlaufen und lokale Variablen prüfen/
Was ist der Unterschied zwischen traceback() und debug()?
- traceback() analysiert nach Fehler/ debug() führt interaktiv durch Code/
Wie kombiniert man tryCatch() mit warnungen?
- Handler für error und warning → gezielte Fehlerreaktion statt Abbruch des gesamten Programms/
Wann ist microbenchmark() besser als system.time()?
- Bei kurzen Operationen (< 1 ms) → mehr Wiederholungen und präzisere Mittelwerte/
Warum kann Rprof() langsame Funktionen identifizieren?
- Erfasst Aufrufhäufigkeit im Zeitverlauf → zeigt Prozentanteil der Laufzeit je Funktion/
Wann ist profvis() nützlicher als summaryRprof()?
- Bei visueller Analyse → HTML-Flamegraph zeigt zeitlichen Verlauf und Speicheranteile/
Wie hängt Non-Standard Evaluation mit dplyr zusammen?
- dplyr-Funktionen nutzen NSE → Variablennamen ohne Anführungszeichen möglich (filter(df, age > 30))/
Wann kann NSE problematisch sein?
- Bei Programmierung innerhalb von Funktionen → Variablennamen werden nicht wie erwartet aufgelöst/
Wie nutzt man Formeln praktisch in Modellen?
- y ~ x + z beschreibt Modellbeziehung → lm(), glm(), aov() verwenden diese zur Designmatrix/
Was zeigt environment() bei Funktionen?
- Zeigt die lexikalische Umgebung → nützlich zum Verstehen von Scopes und Closures/
Wann ist attach() praktisch trotz Risiko?
- Für interaktives Explorieren kleiner Daten / nicht empfohlen in Produktivcode/
Wann ist with() besser als attach()?
- Temporärer Namensraum → kein dauerhafter Seiteneffekt auf Suchpfad/
Warum ist on.exit() wichtig bei Dateihandling?
- Garantiert Ressourcenfreigabe (z. B. close(con)) auch bei Fehlern/
Wann ist capture.output() praktisch?
- Für Logging von Funktionen oder Tests ohne Konsolen-Spam/
Warum ist serialize() nützlich für APIs?
- Objekte binär versenden (z. B. über Socket) → kompakt und verlustfrei/
Wie unterscheiden sich == und identical()?
- == prüft inhaltlich / identical() prüft streng Typ und Attribute/
Wann nutzt man all.equal()?
- Vergleich von numerischen Werten mit Toleranz (z. B. Floating Point)/
Wie zeigt Functional Programming seinen Nutzen in R?
- Kombination von apply-Familie, Closures und Lazy Evaluation → sauberer und flexibler Code/
Was bedeutet „Everything is a Function Call“ in R?
- Fast alle Operationen (auch Zuweisung, Indexierung) sind Funktionsaufrufe → Homogenes Design/
Wie zeigt sich Homoikonizität in R (ähnlich LISP)?
- Code und Daten haben gleiche Struktur → ermöglicht Metaprogrammierung über Expressions/
Last changed2 months ago