Я — ученый [здесь про это подробнее]. «Пролетарий умственного труда». По образованию физик. Тружусь на ниве обработки медицинской и биологической информации 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.
За что я его люблю (список)
- Интерактивность, «Программирование с данными» — мой любимый стиль работы
- Изящный (на любителя) язык — люблю списки, data frames, функциональное программирование и лямбда-функции (а-la)ю Свобода самовыражения: одну и ту же задачу можно решить десятью способами (смягчает ощущение рутины)
- «Трезво смотрит на этот мир» — редко «падает» или кого-нить «подвешивает», логичные операции с пропущенными данными, обработка ошибок во время выполнения (try-error), легкий обмен с системой на уровне стандартного I/O и пр.
- Полный набор готовых к употреблению статистических процедур
- Хорошо документирован и хорошо сопровождается — совместимость, преемственность и т.п.
- Собрал вокруг себя по-человечески приятное профессиональное сообщество (форумы, конференции пользователей и пр.)
- Хорошо докуметированный интерфейс для внешних библиотек и функций на чем угодно — Фортран, С, Java. Отсюда море хорошо документированных библиотек по всем аспектам статистики и обработки данных практически во всех сферах науки, но с основным упором на биоинформатику/биостатистику; все регулярно и корректно обновляется, если есть на то авторская воля
- Отсутствие обязательного 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 еще многим пригодится.
Автор: vladob