Klasa W R: S3 vs S4

Chcę utworzyć klasę w R, Czy powinienem użyć klasy S3 czy S4?

Czytam o nich wiele różnych rzeczy, czy jest jedna lepsza od drugiej?

 49
Author: RockScience, 2011-06-23

2 answers

S3 może wysyłać tylko na pierwszym argumencie, podczas gdy S4 może wysyłać na wielu argumentach. Jeśli chcesz mieć możliwość pisania metod dla funkcji foo, które powinny robić różne rzeczy, jeśli dany obiekt klasy "bar" lub dany obiekt klasy "bar" oraz "foobar", lub podane obiekty klas "barfoo" i "foobar", wtedy S4 zapewnia znacznie lepszy sposób radzenia sobie z takimi złożonościami.

S3 jest bardzo prosty i łatwy w implementacji, ale tak naprawdę nie jest formalnym systemem obiektowym. Że prostota jest kosztem wymuszenia, że obiekty należące do klasy mają odpowiednie komponenty / sloty itp. Z S3 mogę robić rzeczy takie jak class(obj) <- "lm" i metoda dispatch będzie używać metod dla klasy "lm" po przekazaniu obj, ale nie ma gwarancji, że obj naprawdę jest obiektem klasy "lm".

S3 jest łatwy w implementacji, dokumentowaniu i wymaga mniej dodatkowej wiedzy ze strony programisty.

Którego użyć może być tylko czymś, o czym możesz zdecydować. Doug Bates (2003) powiedział, na przykład, że dla nowych projektów będzie używać S4 nad S3. Nie miałem jeszcze potrzeby używania niczego innego niż metody S3.

Więc usiądę i pomyślę o rodzajach klas i metod, które chcesz operować na tych klasach. Pomyśl o funkcjonalności, którą chcesz, a to prawdopodobnie będzie wskazywać na jeden lub drugi system.

Douglas Bates. konwertowanie pakietów Na S4. R News, 3 (1): 6-8, Czerwiec 2003
 58
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 14:58:53

A co z klasami referencyjnymi ? nie jest to S3 i niektórzy uważają, że jest to cukier składniowy na szczycie S4, ale jest to dużo cukru.

Dla krótkiego przykładu, sprawdź to odpowiedź na pytanie, które zadałem tutaj kilka miesięcy temu.

Nadal muszę się dowiedzieć, jak pisać pliki Rd dla takich klas.

 7
Author: mariotomo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:58