Я хочу создать класс в R, следует ли использовать класс S3 или S4?
Я прочитал много разных вещей о них, есть ли кто-то лучше другого?
Я хочу создать класс в R, следует ли использовать класс S3 или S4?
Я прочитал много разных вещей о них, есть ли кто-то лучше другого?
S3 может отправлять только первый аргумент, тогда как S4 может отправлять по нескольким аргументам. Если вы хотите написать методы для функции foo
, которые должны делать разные вещи, если заданы объекты класса "bar"
или заданные объекты класса "bar"
и "foobar"
, или заданы объекты класса "barfoo"
и "foobar"
, то S4 обеспечивает гораздо лучший способ справиться с такими сложностями.
S3 очень прост и прост в реализации, но на самом деле не является формальной объектно-ориентированной системой. Эта простота достигается за счет обеспечения того, чтобы объекты, принадлежащие классу, имели правильные компоненты/слоты и т.д. С S3 я могу делать такие вещи, как class(obj) <- "lm"
, и отправка метода будет использовать методы для класса "lm"
при передаче obj
, но нет гарантии, что obj
действительно является объектом класса "lm"
.
S3 легко реализовать, документировать и требует меньше дополнительных знаний со стороны программиста.
Для использования может быть только то, что вы можете решить. Дуг Бейтс (Doug Bates, 2003) сказал, например, что для новых проектов он будет использовать S4 над S3. Мне еще не нужно было использовать ничего, кроме методов S3.
Итак, я сидел и думал о типах классов и методах, которые вы хотите использовать для этих классов. Подумайте о функциональности, которую вы хотите, и это, вероятно, укажет на одну систему или другую.
Дуглас Бейтс. Преобразование пакетов в S4. R News, 3 (1): 6-8 июня 2003 г.
Как насчет Справочных классов? это не S3, а некоторые считают его синтаксическим сахаром поверх S4, но это много сахара.
В качестве короткого примера, проверьте ответы на вопрос, заданный здесь несколько месяцев назад.
Мне еще нужно выяснить, как писать Rd файлы для таких классов.