Richtiger Weg, S3-Versand auf R6-Klassen zu implementieren

9

Ich habe eine R6 -Klasse und möchte eine S3 -Methode dafür hinzufügen. Die Dokumentation, die ich gefunden habe, erwähnt kurz, dass, um S3 dispatch auf R6 verwenden zu können, class = TRUE benötigt wird, aber ich konnte kein Beispiel dafür finden, wie es gemacht werden sollte.

Ich habe empirisch gesehen, dass einfach das Schreiben einer S3-Methode in der Form s3generic.r6class funktioniert, aber ich wollte wissen, ob das richtig ist, um eine S3 -Methode für R6 zu schreiben.

Beispiel: Ich habe eine Klasse R6 , die ein list

verbessert %Vor%

Frage 1

Natürlich möchte ich eine Methode bereitstellen, um die zugrunde liegende Liste zu erhalten, also wollte ich eine as.list -Methode hinzufügen. Ist es Standard, sowohl eine allgemeine S3-Funktion als auch eine öffentliche Funktion as.list innerhalb der Klasse hinzuzufügen? Meine intuitive Antwort ist, beide hinzuzufügen.

%Vor%

Wenn ich jetzt ein Objekt mylist <- R6list$new(as.list(letters[1:5])) habe, kann ich entweder as.list(mylist) oder mylist$as.list() aufrufen. Ist einer von denen gegenüber dem anderen bevorzugt?

Frage 2
Ist es etwas Besonderes, eine S3 -Methode für R6 classes zu schreiben, oder ist das, was ich oben geschrieben habe, ausreichend und richtig? Ich war mir nicht sicher, ob die S3 -Methode außerhalb der Klassendefinition geschrieben werden muss, oder ob R6 irgendwie eine Möglichkeit bietet, S3 -Methoden darin zu schreiben, so dass der gesamte Code, der sich auf die Klasse bezieht, lokalisiert ist.

    
Dean Attali 23.01.2015, 19:46
quelle

1 Antwort

4

Ich habe Winston Chang, den Autor von R6 , über dieses auf Github gefragt. Seiner Meinung nach ist der in der ersten Frage angegebene Code der richtige Weg, S3-Methoden für R6-Klassen zu schreiben.

    
Dean Attali 16.04.2015, 19:12
quelle

Tags und Links