Dynamischer R Checker (JACK3)
Der dynamische Checker vergleicht den Output eines vom Lernenden eingereichten Codes mit dem erwarteten Output. Dazu wird innerhalb des Checkers ein Testfall definiert (Erwartete Ausgabe), in dem der Code hinterlegt wird, der den zu erwarteten richtigen Output generiert. Dieser wird dann nach der Einreichung des Lernenden mit dem vom Code des Lernenden generierten Output verglichen. Durch das Klicken auf den Button Dynamischer Testfall wird ein dynamischer Test erzeugt und ein Fenster öffnet sich. Dort lassen sich folgende Einstellungen vornehmen:
- Name: Name des Testfalls.
- Postcode: Es ist möglich benutzerdefinierten Postcode in Aufgaben zu hinterlegen. Ab JACK 0.14.0: Hier können Aufgabenvariablen verwendet werden. Der Wert der Variablen wird in R-Syntax umgeformt.
- Nachverarbeitungsfunktion: Muss nur gesetzt sein, falls spezielle R-Funktionen zur Nachbearbeitung des studentischen Codes nötig sind. Dies kann nötig sein, um verschiedene richtige Antworten auf ein gleiches Format zu bringen, dann könnte in dem Feld erwartete Ausgabe auf die Ausgabe dieser Nachbearbeitungsfunktion getestet werden. Für einfache Aufgaben können diese Felder zunächst leer gelassen werden. Beispiel: Wird hier der Wert "myParser" angegeben, so wird nicht mit der intern generierten Funktion "studentInputAsFunc()" verglichen, sondern mit "myParser(studentInputAsFunc())". In diesem Fall muss die Funktion im Feld postCode definiert werden! Ab JACK 0.14.0: Hier können Aufgabenvariablen verwendet werden. Der Wert der Variablen wird in R-Syntax umgeformt.
- Erwartete Ausgabe: Hier sollte der Ausdruck stehen, der mit dem Testthat-Framework auf Gleichheit getestet werden soll. Hier ist zu beachten, dass es nötig sein kann Variablenersetzungen wie im Vorausgefüllten Code vorzunehmen. Wichtig: Variablen, die Text enthalten, müssen mit
'
umgeben werden, damit sie korrekt in den R-Ausdruck eingebettet werden. Bsp.:'[var=text]'=='Text' wird zu 'Text'=='Text'
Ab JACK 0.14.0: Der Wert der Variablen wird automatisch in R-Syntax umgeformt. - Toleranz (e^{...}): Der Vergleich mit dem Testthat-Framework wird mit Toleranz vorgenommen. -4 bedeutet hier, dass auf |erwartung-eingabe| <e^-4 geprüft wird.
- Regelart: Hier kann man zwischen Absence und Presence wählen. Bei Absence darf die erwartete Ausgabe nicht vorhanden sein und bei Presence muss die erwartete Ausgabe vorhanden sein.
- Punktemodus: Hier kann man zwischen Deduction und Gain wählen, d.h. ob die Punkte bei erfolgreichem Test abgezogen werden oder aufaddiert werden.
- Punkte: Die Punkte, die je nach Punktemodus abgezogen oder aufaddiert werden. Am Ende werden die Punkte auf 0-100 Punkte eingeschränkt, d.h. es gibt keine negativen Punkte)
- Feedback (im Fehlerfall): Wird dem Lernenden angezeigt, wenn dieser Test fehlschlägt.
In dem Beispiel soll der Mittelwert berechnet werden. Der dynamische Checker schaut, ob das Ergebnis übereinstimmt. Wenn das Ergebnis der Mittelwert der angegebenen Zahlen ist, dann gibt dieser Checker 60 Punkte zurück.
R-Pakete
Es werden verschiedene R-Pakete zur Verfügung gestellt, die innerhalb von R-Code genutzt werden können.
Die folgenden Pakete sind installiert:
- AER
- aghanck
- base
- car
- compositions
- datasets
- DescTools
- dplyr
- graphics
- grDevices
- grid
- Hmisc
- ineq
- KernSmooth
- lattice
- lmtest
- MASS
- methods
- moments
- mtvnorm
- psych
- sandwich
- stats
- testthat
- tools
- utils
- zoo
Davon werden die folgenden immer geladen und stehen somit immer zur Verfügung:
- aghanck
- base
- datasets
- graphics
- grDevices
- grid
- KernSmooth
- lattice
- methods
- stats
- testthat
- utils
Pakete die installiert, aber nicht geladen sind können wie folgt verwendet werden:
- Das Paket kann mit
library("paketname")
geladen werden. Danach stehen alle Funktionen zur Verfügung. Zu Beachten: Möglicherweise überschreibt dies Funktionen aus bereits geladenen Paketen. Existiert bereits eine Funktion mit demselben Namen wird immer die, aus dem zuletzt geladenen Paket, verwendet. Ein so geladenes Paket steht immer für den darauf folgenden R-Code zur Verfügung. Pakete werden nur für eine Anfrage geladen und müssen in anderen Komponenten erneut geladen werden (Beispielsweise muss im Vordefinierten Code und im R-Taschenrechner jeweils die Library geladen werden, damit diese in beiden zur Verfügung steht). Wird der Library-Befehl aus dem Code entfernt und dieser erneut abgeschickt, wird das Paket nicht mehr geladen.
ODER
- Funktionen aus nicht geladenen Paketen können immer mit dem ::-Operator genutzt werden. Dieser wird im folgenden Format verwendet
paketname::funktion
(Bsp.:base::abs(-2) -> 2
).
Wenn Sie weitere R-Pakete benötigen, wenden Sie sich bitte an das JACK-Team.