Ich werde die Definition einer reinen Funktion von einem Datacamp course paraphrasieren von Hadley Wickham:programmatisch bestimmen, ob eine R-Funktion rein ist
- Ausgänge hängen nur von Eingängen
- Sie nichts außerhalb der Funktion ändern
- keine Einstellung der globalen Variablen, kein Plot, kein Druck zu trösten, etc
- Do h nicht Ave alle Eingänge, die für verschiedene Benutzer oder Sitzungen unterschiedlich sein können
Wie kann ich feststellen, ob eine bestimmte Funktion in einer automatisierten Weise rein ist? Ich habe über die Verwendung von args()
gedacht, um nach Standardwerten zu suchen, aber dann bin ich nicht sicher, wie man überprüft, ob die Standardwerte globale Werte sind. Und ich habe darüber nachgedacht zu prüfen, aus welcher Bibliothek eine Funktion stammt, da einige bekanntermaßen meist reine Funktionen enthalten. Aber ich glaube nicht, dass das ein Test ist, der zu 100% funktioniert.
Alle Teilantworten wären ebenfalls hilfreich. Zum Beispiel: Wie kann ich feststellen, ob eine Funktion einen Plot erstellt? Wie kann ich feststellen, ob eine Funktion auf der Konsole gedruckt wird? Ich stelle mir vor, man könnte Testfälle entwerfen, aber viele positive Ergebnisse zu zeigen und keine negativen zu finden, ist auch kein endgültiger Beweis.
Für die dritte, können wir annehmen, dass Eingaben, die in der Funktion gehen, selbst rein sind, z. B. nicht von etwas erzeugt werden, das sich je Benutzer unterscheiden kann, wie eine Umgebungsvariable bekommen? –
Ich möchte nicht davon ausgehen, dass die Eingaben pro Benutzer unterschiedlich sein können. Es wäre schön, auch das überprüfen zu können. – Bobby
'R CMD CHECK' führt einige davon aus - wenn Sie eine Funktion definieren, die versucht, ein Objekt zu verwenden, das nicht im verfügbaren Namespace ist, wird eine Warnung ausgegeben, etwa wie" keine sichtbare Bindung für Variable gefunden ". Sie könnten dort in den zugrunde liegenden Code schauen. – Gregor