Как я могу "думать о ООП" при использовании R?

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Это полезный вопрос, чтобы спросить "почему OOP" перед "как OOP".

Ответ 3

Вы можете проверить эти ссылки: первый, second один.

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

S3: <method>.<class>(<object>)
R5: <object>$<method>

В любом случае, если вы можете взять копию, я рекомендую: "R в двух словах", глава 10.

Ответ 4

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

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

Ответ 5

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

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

Рассмотрим изучение пакета методов (S4).

Ответ 6

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