Как вы комбинируете «Revision Control» с «Workflow» для R? - PullRequest
22 голосов
/ 18 февраля 2010

Я помню, как сталкивался с пользователями R, которые писали, что они используют "Контроль версий" (, например: "Контроль версий" ), и мне любопытно узнать: как вы комбинируете "Контроль версий" со своей статистикой? рабочий процесс анализа?

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

Длинное обновление к вопросу : После ответов некоторых людей и вопроса Дирка в комментарии я бы хотел еще немного задать свой вопрос.

После прочтения вики-статьи о " контроль версий " (с которой я ранее не был знаком), мне стало ясно, что при использовании контроля версий нужно создать разработка структуры его кода. Эта структура ведет либо к «конечному продукту», либо к нескольким отраслям.

При создании чего-то вроде, скажем, веб-сайта. Обычно есть один конечный продукт, над которым вы работаете (веб-сайт), с некоторыми прототипами.

Но при проведении статистического анализа работа (на мой взгляд) отличается. Иногда вы знаете, куда хотите попасть. Но чаще вы исследуете. Исследуйте очистку набора данных. Изучите различные методы статистического анализа и задайте различные вопросы о ваших данных (и я пишу это, зная, что Фрэнк Харрелл и другие опытные статистики считают по поводу углубления данных ).

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

  • Какое программное обеспечение контроля версий вы используете (и почему)?
  • Какую IDE вы используете (и почему)? Более интересный вопрос о рабочем процессе:
  • Как вы структурируете свои файлы?
  • Что вы храните в отдельном файле и что в качестве ревизии? или спрашивать по-другому - какой должна быть «ветка», а какой «подпроект» в вашем коде? Например: Когда вы начинаете исследовать ваши данные, должен ли график создаваться, а затем стираться, потому что он никуда не приводил (но сохранялся как ревизия), или должен быть файл резервной копии этого пути?

Как вы решить эту напряженность было мое первоначальное любопытство. Второй вопрос: «Чего мне не хватает?». Каким (эмпирическим) правилам следует следовать, чтобы избежать распространенных ошибок при статистическом программировании с контролем версий?

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

Большое спасибо, Tal

Ответы [ 5 ]

18 голосов
/ 18 февраля 2010

Мой рабочий процесс ничем не отличается от рабочего процесса Бернда. У меня обычно есть главный каталог, куда я помещаю все свои файлы кода * .R. Как только у меня в текстовом файле более 5 строк, я запускаю контроль версий, в моем случае - git. Большая часть моей работы не в командном контексте, что означает, что я единственный, кто меняет свой код. Как только я делаю существенное изменение (да, это субъективно), я делаю проверку. Я согласен с Дирком, что этот процесс ортогональн к рабочему процессу.

Я использую Eclipse + StatET, и хотя в Eclipse есть плагин для git ( EGit и, возможно, другие), я его не использую. Я в Windows и просто использую git-gui для Windows. Вот еще несколько вариантов .

В управлении версиями есть много места для личных особенностей, но я рекомендую этот совет как лучшую практику: если вы сообщаете результаты другим (например, журнальная статья, ваша команда, руководство вашей фирмы) ВСЕГДА выполните проверку контроля версий непосредственно перед запуском результатов, которые будут переданы другим. Неизменно через 3 месяца кто-то будет смотреть на ваши результаты и задавать вопросы о коде, на который вы не сможете ответить, если не знаете ТОЧНОЕ состояние кода, когда вы производите эти результаты. Поэтому сделайте это на практике и укажите в комментариях «это версия кода, которую я использовал для финансовых результатов за 4-й квартал» или как бы там ни было.

Также имейте в виду, что контроль версий не может заменить хороший план резервного копирования. Мой девиз: «3 экземпляра. 2 географии. 1 мир в покое».

EDIT (24 февраля 2010 г.): Джоэл Спольски, один из основателей Stack Overflow, только что выпустил очень наглядное и очень классное введение в Mercurial . Одно только это руководство может послужить причиной для принятия Mercurial, если вы еще не выбрали систему контроля версий. Я думаю, что когда дело доходит до Git vs. Mercurial, самый важный совет - выбрать один и использовать его. Возможно, используйте то, что используют ваши друзья / коллеги, или используйте тот, который лучше всего подходит для обучения. Но просто используйте уже! ;)

13 голосов
/ 19 февраля 2010

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

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

Тем не менее, я думаю, что представление о том, что статистический анализ является чисто исследовательским без какой-либо цели, потенциально проблематично. Это может привести к тому, что вы на 5 шагов пройдете момент своей эврики и не сможете вернуться к нему. Всегда есть какая-то цель, даже если сама цель меняется. Кроме того, если нет цели, как вы узнаете, когда достигли конца?

Один из подходов - начать с одного R-файла при запуске проекта (или набора файлов, как в примерах Джоша и Бернда) и постепенно добавлять к нему (чтобы он увеличивался в размере) по мере открытия , Это также особенно верно, когда у вас есть данные, которые необходимо сохранить как часть анализа. Этот файл должен регулярно контролироваться версией, чтобы гарантировать, что вы всегда можете сделать шаг назад, если допустите ошибки (что позволит увеличить прибыль). Системы контроля версий чрезвычайно полезны при разработке не только потому, что они гарантируют, что вы ничего не потеряете, но и потому, что они предоставляют вам временную шкалу. И пометьте свои проверки, чтобы вы знали, что в них с первого взгляда, и отметили основные вехи. Мне нравится мнение JD о регистрации перед отправкой чего-либо.

После того, как вы пришли к окончательному набору заключений, зачастую лучше создать окончательную версию вашего файла, в которой обобщены результаты вашего анализа от начала до конца. Вы можете даже подумать о том, чтобы поместить это в документ Sweave, чтобы он был полностью автономным и грамотным.

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

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

Наконец, если вы используете что-то вроде github, google code или R-forge, вы заметите нечто общее, что у всех них есть: набор инструментов, выходящий за рамки просто системы контроля версий. А именно, вам следует рассмотреть возможность использования таких вещей, как система отслеживания проблем и вики, для документирования прогресса и регистрации открытых проблем / задач. Чем более вы организованы в своем анализе, тем выше вероятность успеха.

5 голосов
/ 18 февраля 2010

Я использую git для контроля версий. Моя типичная структура каталогов (например, для статей) выглядит следующим образом.

.
..
.git
README
README.html
ana
dat
doc
org

Большинство каталогов / файлов (ana, doc, org) находятся под контролем версий. Конечно, большие двоичные наборы данных исключены из контроля версий (через .gitignore). README - это файл режима Emacs.

3 голосов
/ 19 февраля 2010

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

  1. Резервные копии. Если что-то случайно удаляется или капризы судьбы сжигают ваш жесткий диск, ваша работа может быть восстановлена ​​из хранилища. С распределенным управлением версиями ничего кроме апокалипсиса не может заставить вас потерять работу - в этом случае у вас, вероятно, будут другие проблемы, о которых вам все равно придется беспокоиться.

  2. Мать всех кнопок отмены. Анализ выглядел лучше час назад? день назад? неделю назад? Управление версиями обеспечивает кнопку перемотки, которая позволяет путешествовать во времени.

Если вы являетесь единственным человеком, работающим над проектом, вышеупомянутые два пункта, вероятно, показывают, как системы контроля версий будут влиять на вашу работу.

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

Например, я храню все свои курсовые работы в колледже под контролем версий в Subversion хранилище. Я единственный, кто работает с этим хранилищем, поэтому я никогда не разветвляю и не объединяю источник - я просто фиксирую и иногда перематываю. Возможность перематывать мою работу снижает риск попыток какого-то нового анализа - я просто делаю это. Если через два часа кажется, что это не очень хорошая идея, я просто возвращаю файлы проекта и пробую что-то другое.

В отличие от этого, большая часть всех моих пакетов / программ, не относящихся к курсовым работам, находится в git . В такой настройке я часто хочу поэкспериментировать с веткой, имея стабильную мастер-копию. В этих ситуациях я использую git вместо Subversion , потому что git делает ветвление и объединение легкой задачей.

Важным моментом является то, что в обоих этих случаях структура моего хранилища и рабочий процесс , который я использую, не определяются моей системой контроля версий - они решаются мной , Единственное влияние, которое контроль версий оказывает на мой рабочий процесс, заключается в том, что он освобождает меня от необходимости беспокоиться о том, чтобы попробовать что-то новое, решая, что он мне не нравится, и затем отменив все изменения, чтобы вернуться к тому, с чего я начал. Поскольку я использую контроль версий, я могу следовать совету Йоги Берры:

Когда вы придете к развилке на дороге, возьмите ее.

Потому что я всегда могу вернуться и пойти другим путем.

1 голос
/ 18 февраля 2010

Я сам использую git.Локальные репозитории, хранящиеся в том же каталоге, что и проект R.Таким образом, если я устраню проект в будущем, репозиторий останется с ним;Я могу работать в автономном режиме;и у меня нет проблем с IRB, FERPA, HIPPA.

Если мне потребуется дополнительная гарантия резервного копирования, я могу перейти в удаленный (безопасный!) репозиторий.1005 *

...