Что означает «методы S3» в R?

114
задан David Tonhofer 26 October 2019 в 11:56
поделиться

1 ответ

Вот обновленное быстрое краткое изложение многочисленного системы объекта R согласно [1 129] "Усовершенствованный R, 2-й выпуск" (Нажатие CRC, 2019) Hadley Wickham (Руководитель исследовательских работ в RStudio), который имеет веб-представление здесь , на основе главы приблизительно [1 111] Объектно-ориентированное программирование .

Advanced R book cover

первый выпуск с 2015 имеет веб-представление здесь с соответствующей главой по OO здесь .

Подходы к системам OO

Hadley определяет следующее для различения двух отличных подходов к программированию OO:

Функциональное ООП : методы (вызываемые части кода) принадлежат [1 130] родовые функции (чтобы не быть перепутанными с Java/C# общие методы ). Думайте о методах, как располагаемых в глобальной таблице поиска. Метод для выполнения найден системой во время выполнения на основе названия функции, и тип (или класс объекта) одного или нескольких аргументов передал той функции (это называют "отправкой метода"). Мудрые синтаксисом, вызовы метода могут быть похожими на вызовы обычной функции: myfunc(object, arg1, arg2). Этот вызов привел бы время выполнения искать метод, связанный с парой ("myfunc", typeof (объект)) или возможно ("myfunc", typeof (объект), typeof (arg1), typeof (arg2)) если поддержки языка это. В R S3 полное имя родовой функции дает (имя функции, класс) пара. Например: mean.Date метод для вычислений средних из Дат. Попробуйте methods("mean") для списка общих методов с именем функции mean. Функциональный подход ООП найден, например, в пионере OO Smalltalk, Система Объекта языка Common LISP и Julia. Hadley отмечает, что "По сравнению с R, реализация Julia’s полностью разрабатывается и чрезвычайно производительна".

Инкапсулированное ООП : методы принадлежат объектам или классам, и вызовы метода обычно похожи object.method(arg1, arg2). Это называют , инкапсулировал , потому что объект инкапсулирует и данные (поля) и поведение (методы). Думайте о методе, как располагаемом в таблице поиска, присоединенной к объекту или описанию класса объекта. Время выполнения ищет метод на основе имени метода и возможно типа одного или нескольких аргументов. Это - подход, найденный на "популярных" языках OO как C++, Java, C#.

В обоих случаях, если наследование поддерживается (это, вероятно), время выполнения может пересечь иерархию классов вверх, пока это не нашло достойным ключа поиска вызова.

, Как узнать, какая система объект R принадлежит [1 149]
library(sloop) # formerly, "pryr"
otype(mtcars)
#> [1] "S3"

системы объекта R

S3

  • Функциональный подход ООП.
  • самая важная система по словам Hadley.
  • Самый Простой, наиболее распространенный. Первая система OO используется R.
  • Идет с основой R, используемый всюду по основе R.
  • Полагается на конвенции, а не осуществленные гарантии.
  • См. Камеры, John M, и Trevor J Hastie. 1992. "Статистические модели в S.". Wadsworth & ручьи/Капуста Усовершенствованные Книги & программное обеспечение.
  • Детали в [1 139] "Усовершенствованный R, 2-й выпуск" здесь .

S4

  • Функциональный подход ООП.
  • Третья по важности система по словам Hadley.
  • Перезапись S3, поэтому подобного S3, но более формального и более строгого: это вынуждает Вас думать тщательно о проектировании программы. Удовлетворенный для создания больших систем (например, Биопроводник проект).
  • Реализованный в основном пакете "методов".
  • См.: Камеры, John M. 1998. "Программирование с Данными: Руководство по Языку S". Springer.
  • Детали в [1 141] "Усовершенствованный R, 2-й выпуск" здесь .

RC иначе "Классы ссылки"

R6

Другие

существуют другие, как [11 100], R.oo (подобный RC), первичный (основанный на прототипе, думают JavaScript), и Mutatr. Однако "Усовершенствованный R" говорит:

Кроме R6, который широко используется, эти системы, прежде всего, представляют теоретический интерес. У них действительно есть свои преимущества, но немного пользователей R знают и понимают их, таким образом, другим трудно читать и способствовать Вашему коду.

убедиться прочитать главу по [1 126] компромиссы в [1 147] "Усовершенствованный R, 2-й выпуск" , также.

0
ответ дан 24 November 2019 в 02:35
поделиться