У « Advanced R » Хэдли Уикхэма есть несколько очень хороших вступлений и ссылок. Я тиражирую этот раздел для лучшей индексации.
Выбор системы
Три ОО-системы - это много для одного языка, но для большинства программ на R достаточно S3. В R вы обычно создаете довольно простые объекты и методы для уже существующих универсальных функций, таких как print (), summary () и plot (). S3 хорошо подходит для этой задачи, и большая часть кода OO, который я написал на R, это S3. S3 немного странный, но он выполняет работу с минимумом кода.
Если вы создаете более сложные системы взаимосвязанных объектов, S4 может быть более подходящим. Хорошим примером является пакет Matrix Дугласа Бейтса и Мартина Мачлера. Он предназначен для эффективного хранения и вычисления с различными типами разреженных матриц. Начиная с версии 1.1.3, он определяет 102 класса и 20 универсальных функций. Пакет хорошо написан и хорошо прокомментирован, а сопровождающая виньетка (vignette ("Intro2Matrix", package = "Matrix")) дает хороший обзор структуры пакета. S4 также широко используется пакетами Bioconductor, которые должны моделировать сложные взаимосвязи между биологическими объектами. Биокондуктор предоставляет много хороших ресурсов для изучения S4. Если вы освоили S3, S4 относительно легко подобрать; идеи все одинаковые,
Если вы программировали на основном языке ОО, RC будет казаться очень естественным. Но поскольку они могут вызывать побочные эффекты через изменчивое состояние, их труднее понять. Например, когда вы обычно вызываете f (a, b) в R, вы можете предположить, что a и b не будут изменены. Но если a и b являются объектами RC, они могут быть изменены на месте. Как правило, при использовании объектов RC вы хотите минимизировать побочные эффекты в максимально возможной степени и использовать их только в тех случаях, когда изменяемые состояния абсолютно необходимы. Большинство функций по-прежнему должны быть «функциональными» и не иметь побочных эффектов. Это делает код более понятным и понятным для других программистов на R.
Он ссылается на « Практическое руководство по программированию на S4 ».
Есть ряд других интересных ресурсов, если вы будете следовать его указаниям.
Джон М. Чемберс говорит в «Объектно-ориентированном программировании, функциональном программировании и R» :
На R также сильно повлияли идеи функционального программирования и, в частности, желание объединить функциональное и объектно-ориентированное программирование.
Добавил бы что-то, не имеющее прямого отношения к вопросу, но с той же идеей: «Фреймы данных в Spark для крупномасштабной науки о данных» . Поскольку это сближает Scala и R, из-за этого может получиться отличная ОО / функциональная синергия.