У " Advanced R " Хадлі Вікхема є дуже хороший вступ та посилання. Я повторюю цей розділ для кращої індексації.
Підбір системи
Три системи OO - це багато для однієї мови, але для більшості програм програмування R достатньо S3. У R зазвичай створюються досить прості об'єкти та методи для попередньо існуючих загальних функцій, таких як print (), Summary () та plot (). S3 добре підходить до цього завдання, і більшість кодів OO, які я написав на R, є S3. S3 трохи химерний, але він виконує роботу з мінімальним кодом.
Якщо ви створюєте складніші системи взаємопов'язаних об'єктів, S4 може бути більш доречним. Хороший приклад - пакет «Матриця» Дугласа Бейтса та Мартіна Махлера. Він призначений для ефективного зберігання та обчислення багатьох різних типів розріджених матриць. З версії 1.1.3 він визначає 102 класи та 20 загальних функцій. Пакет добре написаний і добре коментований, а супровідна віньєтка (віньєтка ("Intro2Matrix", пакет = "Матриця")) дає хороший огляд структури пакета. S4 також широко використовується пакетами біокондукторів, які потребують моделювання складних взаємозв'язків між біологічними об'єктами. Біопровідник забезпечує багато хороших ресурсів для вивчення S4. Якщо ви освоїли S3, підібрати S4 порівняно легко; ідеї все ті ж,
Якщо ви запрограмовані на основній мові OO, RC буде здаватися дуже природним. Але оскільки вони можуть вводити побічні ефекти через стан, що змінюється, їх важче зрозуміти. Наприклад, коли ви зазвичай називаєте f (a, b) в R, ви можете припустити, що a і b не будуть змінені. Але якщо a і b є об'єктами RC, вони можуть бути змінені на місці. Як правило, при використанні об'єктів RC ви хочете максимально звести до мінімуму побічні ефекти і використовувати їх лише там, де абсолютно потрібні зміни, що змінюються. Більшість функцій все ж повинні бути "функціональними" та без побічних ефектів. Це полегшує міркування та легше розуміти інших програмістів R.
Він посилається на " Практичний посібник з програмування S4 ".
Є цілий ряд інших цікавих ресурсів, якщо слідувати його вказівникам.
Джон М. Чемберс говорить у "Об'єктно-орієнтованому програмуванні, функціональному програмуванні та R" :
R також сильно вплинули на ідеї функціонального програмування і, зокрема, на прагнення поєднати функціональне з об'єктно-орієнтованим програмуванням
Додамо б щось, що не пов'язане безпосередньо з питанням, але збігається з тією ж ідеєю: "DataFrames in Spark for Science Big Data Science" . Оскільки це зближує Scala та R, з цього може вийти велика OO / функціональна синергія.