Как я могу "думать ООП" при использовании R? - PullRequest
11 голосов
/ 02 июня 2011

Я аспирант по статистике, много работаю с Р. Я знаком с ООП в других контекстах программирования.Я даже вижу его использование в различных статистических пакетах, которые определяют новые классы для хранения данных.

На этом этапе моей карьеры выпускника я обычно пишу какой-то алгоритм для некоторого задания класса - что-то, что берет необработанные данные и дает какой-то результат.Я хотел бы упростить повторное использование кода и выработать хорошие привычки кодирования, особенно перед тем, как перейти к более сложным исследованиям.Пожалуйста, дайте несколько советов о том, как «думать ООП» при статистическом программировании в R.

Ответы [ 6 ]

7 голосов
/ 02 июня 2011

Я бы сказал, что вы не должны. Попробуйте думать о R с точки зрения рабочего процесса. На этой странице есть несколько полезных советов:

Рабочий процесс для статистического анализа и написания отчета

Другим важным соображением является построчный анализ и воспроизводимые исследования. Здесь хорошая дискуссия:

функции записи и построчная интерпретация в рабочем процессе R

5 голосов
/ 02 июня 2011

Два аспекта ООП - это данные и универсальные методы / методы, которые работают с данными.

Данные (особенно данные, являющиеся результатом анализа) часто состоят из структурированных и взаимосвязанных фреймов данных или других объектов, и каждый хочет управлять ими скоординированным образом. Отсюда концепция ООП классов как способ организации сложных данных.

Обобщения и методы, которые их реализуют, представляют собой общие операции, выполняемые с данными. Их полезность возникает, когда набор обобщенных элементов работает согласованно в концептуально связанных классах. Возможно, разумным примером является вывод lm / glm в виде классов и реализация итогов, anova, прогнозирования, остатков и т. Д. В качестве обобщений и методов.

Многие анализы следуют за привычными рабочими процессами; здесь один пользователь классов и методов и получает выгоду от скоординированных данных + знакомых обобщений. Мышление «ООП» может привести вас к изучению методов объекта, methods(class="lm"), а не его структуры, и может помочь вам структурировать рабочие потоки так, чтобы они следовали четко определенным каналам установленных классов и методы.

Реализуя новую статистическую методологию, можно подумать о том, как организовать результаты в согласованную, взаимосвязанную структуру данных, представленную в виде нового класса, и написать методы для класса, которые соответствуют установленным методам в похожих классах. Здесь можно представить данные внутренне таким образом, который удобен для последующих вычислений, а не так, как пользователь может захотеть «увидеть» их (отделяя представление от интерфейса). И пользователю вашего класса легко (как часто говорит сам Чамберс) использовать новый класс в существующих рабочих процессах.

Полезно задать вопрос «почему ООП» перед «как ООП».

4 голосов
/ 02 июня 2011

Вы можете проверить следующие ссылки: первая , вторая .

И если вы хотите увидеть какой-то серьезный код OO в R, прочитайтестраницу справочника по ReferenceClasses (так называемая ориентация объекта R5) и взгляните на пакет Rook, так как он сильно зависит от ReferenceClasses.Кстати, Rook является хорошим примером разумного использования R5 в кодировании R.Предыдущий опыт работы с JAVA или C++ может быть полезен, поскольку диспетчеризация метода R5 отличается от S3.На самом деле, S3 OO очень примитивен, так как фактически «класс» сохраняется как атрибут объекта, так что вы можете изменить его довольно легко.копию, я рекомендую: «R в двух словах», глава 10.

3 голосов
/ 02 июня 2011

У меня ограниченные знания о том, как эффективно использовать R, но здесь есть статья, которая позволила даже мне пройти через использование R в OO-манере:

http://www.ibm.com/developerworks/linux/library/l-r3/index.html

1 голос
/ 02 июня 2011

Я возражаю против высказывания Дэвида Мерца «Пакет методов все еще несколько условен из того, что я могу сказать, но некоторая умеренно настроенная версия, похоже, продолжит работу в более поздних версиях R», упомянутых в ссылке в ответе BiggsTRC. На мой взгляд, программирование с помощью классов и методов и использование пакета методов (S4) - это правильный способ «думать ООП» в R.

В последнем абзаце главы 9.2 «Программирование с использованием новых классов» (стр. 335) «Программного обеспечения для анализа данных» Джона М. Чемберса (2008) говорится: «Количество программирования, связанного с использованием нового класса, может быть намного больше, чем количество, затрачиваемое на определение класса. Вы обязаны перед пользователями ваших новых классов сделать это программирование максимально эффективным (даже если вы ожидаете, что оно будет вашим собственным»). основной пользователь). То, что стиль программирования в этой главе и в главе 10 [«Методы и общие функции»] несколько отличается, не является совпадением. Мы занимаемся здесь более серьезным программированием ».

Подумайте над изучением пакета методов (S4).

0 голосов
/ 03 июня 2011

Помимо некоторых других хороших ответов здесь (например, R в главе Nutshell и т. Д.), Вам следует взглянуть на основные пакеты Bioconductor. BioC всегда уделял большое внимание проектированию ООП с использованием классов S4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...