12 февраля 2013 в 01:01

Мой опыт введения в R или «I Love R» из песочницы

R*
Я — ученый [здесь про это подробнее]. «Пролетарий умственного труда». По образованию физик. Тружусь на ниве обработки медицинской и биологической информации 30+ лет.
В R работаю ровно 10 лет, мигрировав на него после 15 лет плотного сотрудничества с Matlab. Первопричиной миграции на другую рабочую платформу послужила моя собственная физическая миграция на противоположный край Земли в Окланд, Новая Зеландия. Здесь жизнь с первых дней толкнула меня в объятия R, о чем мне еще не приходилось жалеть.

Все чаще наблюдаю вспышки интереса к R в профессиональном ру.нете. Ну вот и на этом уважаемом ресурсе появляются статьи про него. Далее под катом моя первая попытка русскоязычного введения в R — первая (словесная) часть презентации, которую я делал для коллег факультета Animal Science, Iova State University три года назад.
(в сторону: а как, оказывется, трудно себя переводить...)

<img src="" alt=«image»/>
В этом посте
  • Что такое R
  • Откуда он взялся
  • За что я его люблю
  • Для чего и как я его использую (примеры)
  • Мифы и правда

Что такое R


В первую очередь R это система для статистических и прочих научных расчетов, использующая язык программирования S.

S — язык, написанный статистиками для статистиков. по определению автора Джона Чамберса. Язык с момента его появления был очень хорошо принят и протестирован поколениями весьма придирчивых пользователей-статистиков. Можно считать, что он достаточно широко известен и принят в мировом статистическом сообществе. На языке S реализованы и до сих пор эксплуатируются ряд критических эпидемиологических, экологических и финансовых моделей по всему миру и во многих отраслях. Как язык с точки зрения меня, как «пишущего пользователя», S представляет собой весьма приятную альтернативу языку SAS.

Из моего собственного опыта — Знакомство и первые уроки S я сам получил в начале 90-х от экспертов-статистиков ВОЗ, с которыми пересекался по научным исследованиям того времени.

По многим оценкам R (как по мне — так и не сильно преувеличенных) — один из самых успешных проектов опенсорса, распространяется свободно с десятков зеркал по всему миру по стандартам лицензий GNU.
Авторы отвечают категорическим отказом на все предложения по коммерциализации проекта, хотя на сегодняшний день есть основание предполагать, что количество установленных копий R в мире превышает совокупное количество копий всех остальных систем статистического анализа.

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

Откуда взялся S и какое это имеет отношение к R


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

Лаборатории Белла (ака Bell Labs, AT&T Bell Labaratories) достаточно известны в истории науки и техники, и АйТи в частности. Статистические исследования там всегда были поставлены весьма серьезно и также серьезно поддерживались всеми доступными компьютерными средствами (читай — тоннами фортрановского и лисповского кода).

То, что потом стало языком S, возникло в 70-х по инициативе и под руководством Джона Чамберса (John Chambers), как набор скриптов, облегчающих «скармливание» данных фортрановскому коду. Т.е. во главу угла ставилась задача интерактивной манипуляции данными, компактность, приятность в написании и читаемость кода и получения приличного вывода на разнообразные устройства таблиц и графиков.

В синтаксисе языка предусмотрено построение практически сколь угодно сложных структур данных, средства для описания специфических статистических задач и объектов — стат. тестов, моделей и пр.

С 1984 года язык обрел имя, свою собственную «Библию» (издана книга Чамберса and Beckers: S: An Interactive Environment for Data Analysis and Graphics), стал по умолчанию содержать практически полный «джентельменский набор» статистика и «вероятностника» — распредления, генераторы случайных чисел, статистические тесты, многие стандартные статистические анализы, работы с матрицами и пр., не говоря уже о развитой системе научной графики. Самое главное — он стал доступен для пользователей по вему миру за весьма умеренную цену.

В 1988 (издана еще одна книга The New S Langugage) — модифицирован с применением ООП, все стало объектами с весьма разумными значениями по умолчанию, доступностью для модификации, элементами самодукоментирования и пр. и пр.

В это же время были лабораториями опубликованы исходники и «белл-лабовский» S стал бесплатным для студентов и для использования в научных целях. Это все как-то было связано с «раскулачиванием» AT&T, но меня уже эти подробности не сильно интересовали.

Существовали и, наверное, все еще существуют коммерческие реализация языка S. Я сталкивался с S-Plus и S2000. Они в разное время поддерживались разными компаниями, в основном, жили (живут?) за счет поддержки ранее созданных на S приложений. В этих пост-белловских версиях S появилась новая версия ООП-движка, но для чистого пользователя это прошло почти бескровно в плане совместимости исторического кода.

R — единственная некоммерческая полностью независимая (от исходной Белловской) реализация языка S.

И по редкому в наше время соглашению каким-то невообразимым для меня способом разработчики текущих версий коммерческого S и некоммерческого R поддерживают их практически полную совместимость и преемственность.

А теперь R



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

В случае с R таких людей трое.
Про Джона Чамберса я уже сказал.

Росс Ихака (Ross Ihaka) — студент, а потом научный сотрудник факультета статистики Оклендского университета темой своей диссертации (которая выполнялась в MIT, USA) выбрал исследование возможности построения виртуальной машины (VM) для статистических языков программирования. В качестве промежуточного языка был выбран Lisp (Common Lisp, CL) и на нем реализован прототип VM, «понимающий» небольшие подмножества из SAS и S.
Дорабатывать диссертацию Росс вернулся в Окланд, где вскорости встретил Роберта Джентельменв и увлекся проектом R.
Диссертацию Росс так и не защитил, но уже имеет ученую степень от нескольких университетов «по совокупности заслуг». В прошлом году ему было присвоено звание и он получил должность Associate Professor (доцент) в своем родном университете.

Роберт Джентелмен (Robert Gentleman) — еще один статистик со страстью к программированию, родом из Канады, будучи в Оклендском университете на стажировке (он тогда работал в Австралии), предложил Россу «написать какой-нибудь язычок».
Согласно легенде, которую я сам слышал от этих «отцов-основателей» всего чуть ли не за месяц они в порыве безумного энтузиазма переписали на CL практически все команды S, включая мощную библиотеку линейного моделирования.

Вычислительным движком R, следуя традициям прототипа, была выбрана известная, общепризнанная и бесплатная библиотека BLAS, (с возможностью использования ATLAS и пр. с тем же интерфейсом).
Пол Murrel, один из из ближайших друзей Росса и также сотрудник Окландского универа расстарался и написал (кажется, на С) с нуля графический движок, полностью воспроизводящий функциональность такового в S.

В результате получился бесплатный полнофункциональный пакетик, моментально получивший место в учебном процессе Окланлского университета, полностью соответствующий описаниям в очень подробных и качественных книгах Чамберса, которые по традиции издавались в мягких обложках и среднего качества печати, зато были дешевы и доступны.
Несколько групп-активистов GNU-шного (например GIS) движения приняли R в качестве платформы для научных вычислений.

Но поистине широчайшую известность R приобрел в биоинформатике, когда один из «отцов» Роберт Джентельмен, вовлеченный в то время в работы фирмы Affimmetrix, продублировал всю функциональность коммерческого софта фирмы и запустил (ну не один, конечно) опенсорсный проект Bioconductor. В настоящее время Bioconductor является безусловным лидером биоинформатического опенсорса для всех "-омиксов" (genomics, proteomics, metabolomics etc.).

Единым языком интерфейса для сего буйства биоинформатических фантазий стал, естественно, R.

Круг замкнулся, когда вышедший на пенсию Чамберс, создатель языка S, вошел на правах полноправного члена в группу активных разработчиков R.

За что я его люблю (список)


  1. Интерактивность, «Программирование с данными» — мой любимый стиль работы
  2. Изящный (на любителя) язык — люблю списки, data frames, функциональное программирование и лямбда-функции (а-la)ю Свобода самовыражения: одну и ту же задачу можно решить десятью способами (смягчает ощущение рутины)
  3. «Трезво смотрит на этот мир» — редко «падает» или кого-нить «подвешивает», логичные операции с пропущенными данными, обработка ошибок во время выполнения (try-error), легкий обмен с системой на уровне стандартного I/O и пр.
  4. Полный набор готовых к употреблению статистических процедур
  5. Хорошо документирован и хорошо сопровождается — совместимость, преемственность и т.п.
  6. Собрал вокруг себя по-человечески приятное профессиональное сообщество (форумы, конференции пользователей и пр.)
  7. Хорошо докуметированный интерфейс для внешних библиотек и функций на чем угодно — Фортран, С, Java. Отсюда море хорошо документированных библиотек по всем аспектам статистики и обработки данных практически во всех сферах науки, но с основным упором на биоинформатику/биостатистику; все регулярно и корректно обновляется, если есть на то авторская воля
  8. Отсутствие обязательного GUI в «базовой комплектации» — Ну не «мышиный» я человек!

Вне списка: Мне просто приятно, что мой основной рабочий инструмент имеет… душу.
Что я, на самом деле, и пытаюсь показать в своей статье.

Для чего и как я его использую (примеры)


Начал писать в этот раздел, но остановился.
Иначе я никогда бы не закончил.
Ой, наверное, как нибудь потом.

Мифы и правда


R медленный

R — «тонкий», для вычислений использует blas/lapack/atlas библиотеки, попробуйте написать что-нибудь быстрее этих старых добры фортрановских (зачастую) «рабочих лошадок». Все критичные функции, как правило, используют векторные операции и реализованы на С.

R нерационально использует вычислительные ресурсы, в частности — память

Да, разработчики признают такой грех. Но рабочее время специалиста сейчас всяко дороже «железа». Выгрузите из современного рабочего компа игрушки и с большинством реальных наборов данных у вас с R проблем не будет.

Бесплатный софт не может быть надежным

Может: Fortran, Linux, C, Lisp, Java etc.

Вместо Эпилога

Как сказано выше, пост ниже является фактически переводом моей презентации для достаточно специфичесуой целевой аудитории, и я вкратце опишу эту аудиторию.

Многим «чистым» АйТи с такими людьми придется встретиться, поскольку производство продуктов питания по привлечению капитала и генерации прибылей уже давно соревнуется с нефтью и прочими энергоносителями. А емкость биоинформатического рынка при медицине и фармакологии ограничена, как ни крути.

Итак, моя аудитория — люди, с базовым образованием в генетике и селекции, ветеринарии, реже — биологии (преимущественно — молекулярной). Дядьки и тетки (последних больше), лет по 20-30-… программирующие (!) на FORTRANe или VB, лихо управляющиеся с excel-таблицами в 100к строк/столбцов и периодически «роняющие» своими задачами (и своим программированием) свой вычислительный линуксовый 500+ядерный кластер 12Тб общей памяти и время от времени требующие расширения дисковой памяти очередным десятком терабайт.

Методическая база — гремучая смесь древних как мир дисперсионных анализов со смешанными моделями, решаемыми никак иначе, как только методом максимального правдоподобия, «плавящие мозг» байесовские сети и т.п.

Данные — таблицы данных от единиц до десятков тысяч строк, включающие иногда 1-5 колонок с фенотипами, но все чаще — десятки или сотни «Ка» столбцов переменных, слабокореллирующих между собой и с фенотипами.

Ну да, еще у них есть «хорошая традиция» расматривать все в аспекте родственных связей (генетика, как-никак). Родственные связи традиционно представлены в виде матрицы «родственных связей» (pedigree) размерами, например 40 000 х 40 000 (это если 40 000 животных). Ну или (пока, к счастью, только в проекте) 20 000 000 х 20 000 000 — это чтобы «охватить» единой моделью все 20 млн. исторических животных, имеющихся в базе данных (DB2, если кому интересно, и даже Сobol еще «выпилили» не отовсюду...)

По столам, заваленным литературой по (одновременно) Fortran, Java, C#, Scalа, Octavia, Linux for Dummies можно узнать недавних выпускников-биоинформатиков. Но как-то быстро многие из них уходят из науки в «кодеры».

Впрочем, знаю и случай обратного движения. Так что R еще многим пригодится.
+33
11736
79
vladob 11,0

Комментарии (7)

+1
Akson87, #
Чуток сумбурно, но интересно. Хочется примеров!
0
vladob, #
Спасибо за приятную оценку моего первого опыта

Да, насчет некоторой сумбурности — это я признаЮ.
Только это я называю «некоторой эмоциональностью». Без нее в незнакомой аудитории в короткой презентации никак не обойтись. Сказывается, также, многолетняя лекторская (сейчас в прошлом) привычка — сначала разбудить аудиторию, а потом начинать «вливать». Я не сторонник обучения во сне, а поскольку сам «жаворонок» и лекции свои предпочитал первой парой… Ну вот оттуда и повелось.
Примеры из той же моей презентации я постараюсь показать вскорости.
0
RouR, #
В R работаю ровно 10 лет, мигрировав на него после 15 лет плотного сотрудничества с Matlab.

Ожидал увидеть детальное сравнение R и Matlab.
0
sielover, #
У меня так вышло, что полноценное знакомство с матлабом случилось после знакомства с R, и вот некоторые вещи матлаба после R казались ну совершенно нелогичными. Как, например, обращение к элементам массива (ну матрицы, ладно) через круглые скобки.
0
vladob, #
Детального не будет, сильно извиняюсь.

Но если вы спросите моего мнения по конкретным вопросам, вставить свои два цента пять копеек в дискуссии постараюсь.
В Matlab не работаю давно, поскольку легкого доступа к легальной копии у меня нет, а жгучей потребности в нем я, работая с R, не ощущаю. Таким же образом у меня с компа несколько лет назад исчезла Matematica, а еще ранее SAS. Хотя последнего я бы оставил, будь моя воля… Но дОрог, собака!..
Я периодически «играюсь» с новыми для меня ЯП, ну просто освежиться. Вот сейчас в планах J … Вот только дождаться «игривого» настроения. А оно почему-то все реже.

Если и бывают «ЯПы-идолы», то у меня их два — LISP и FORTRAN — два монстра (в хорошем смысле), ну или, если хотите, два «экстремума». Не думаю, что я здесь оригинален.
Если представить себе гипотетическую ось — этакую «первую главную компоненту» — языков программирования, и расположить не ней этих двух, то остальные современные ЯПы расположатся где-то между ними.
По ощущениям от работы R будет поближе к LISPу, Matlab к FORTRANу.

И в том и в другом можно решать аналогичные задачи, и с практической точки зрения на первый план выходят аргументы, напрямую к ЯП не относящиеся: что принято в области, где ты работаешь, какие тематические библиотеки доступны и т.д.
0
nuit, #
На самом деле даже для «кодеров» будет очень полезным знакомство с R. Я например очень часто использую R + ggplot2 для создания графиков в различных бенчмарках итп.
0
aledovskiy, #
Во-первых, хочу поблагодарить вас за статью. Мне очень приятно, когда достаточно взрослые люди с богатым профессиональным опытом пишут в интернете. Эх, если бы хотя бы толика моих преподавателей это делала… А им бы только байки травить.

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

Только зарегистрированные пользователи могут оставлять комментарии.
Войдите, пожалуйста.