Почему и когда создается пакет R?

28

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

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

  • отсутствие других пакетов в том же подполе;
  • необходимость обмена с другими исследователями и обеспечения воспроизводимости экспериментов;

И среди моментов, которые могут привести к противоположному решению:

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

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

Жан-Батист Лагеря
источник

Ответы:

17

Я не программирую на R, но я программирую иначе, и здесь я не вижу проблем, специфичных для R.

Я предполагаю, что большинство людей сначала что-то пишут, потому что они действительно хотят этого для себя. И наоборот, любое чувство, что кто-то должен публиковать программное обеспечение, потому что это то, что нужно делать, должно решительно сопротивляться. Умные люди могут быть паршивыми программистами, и часто так и есть.

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

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

Об этом может быть книга, но на ум приходят несколько указателей:

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

  2. По мере возможности тестируйте свой код, чтобы вы могли воспроизводить опубликованные решения с реальными данными из других источников. (Если вы кодируете что-то совершенно новое, это может быть более трудным, но не невозможным. Кроме того, вы часто задаетесь вопросом, является ли это их ошибкой или вашей.)

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

Ник Кокс
источник
1
Я не мог согласиться с этими тремя пунктами (хотя пункт 2 не будет применяться в моем конкретном случае, так как я разработал данный метод). Третий пункт является очень важным, и в более общем плане поднимается вопрос об уровне информации, который можно ожидать от пользователя (или: для кого мы выпускаем пакет): должны ли мы писать код только для специалистов в данной области, знакомых с методом под рукой, или попытаться сделать наш пакет пригодным для использования заинтересованными учеными, которые не читали все связанные статьи?
Лагерь Жан-Батиста
2
№ 2 всегда применяется, насколько «проверить свой код»! У разных людей разные стили в последнем пункте, и нет правильного ответа. Вы можете согласиться с тем, что не программист должен объяснять, что хорошо объясняется в другом месте, или бесполезно документировать программу, кроме как объяснять использование. В сообществе Stata, где я активен, хорошая документация, кажется, широко ценится, и ее отсутствие вызывает озабоченность, но сообщество R должно иметь свои собственные нравы.
Ник Кокс
о том, как рассказать победителям от проигравших и о ваших очень важных моментах: # 1: к счастью, в R есть некоторые пункты, которые можно легко проверить, и которые указывают на лучшую документацию, чем просто формальные требуемые страницы помощи. Предоставляется ли виньетка ( sos::findFnнаходит этот критерий достаточно важным, чтобы поместить эту информацию в таблицу результатов!)? Демо? Веб-страница с дополнительной информацией? Дает ли вам citationнадлежащую статью или книгу № 2, вы можете отправлять примеры данных вместе с вашим кодом, так что даже если нет другой реализации, с которой вы можете проверить свой код, теперь другие могут проверить свою реализацию против вашей.
cbeleites поддерживает Монику
1
«Программисты R часто требуют, чтобы пользователи R знали столько же, сколько и о внедряемой методике, и минимально документировали…». Важно отличать документацию кода от статистического метода . R документация абсолютно не место для изучения методов статистики. Даже виньетки предполагают определенный уровень сложности. Слишком много жалоб на минимальное документирование в R на самом деле равносильно жалобам на то, что документы не дают им ложных статистических знаний.
Джоран
2
Многоточие ... было предназначено, чтобы сигнализировать в сторону. Сообщество R должно устанавливать свои собственные стандарты или, по крайней мере, обсуждать их.
Ник Кокс,
14

Это важный и практический вопрос. Давайте начнем с того, что будем различать написание пакета и его публикацию в CRAN.

Причины не писать пакет:

  • Эффективность затрат.
  • Недостаток опыта.

Причины, чтобы написать пакет R:

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

Причины для отправки пакета (CRAN, Bioconductor, ...):

  • Вклад в сообщество.
  • Легкость распространения.
JohnRos
источник
7
Я бы добавил, что недостаток опыта также является причиной для написания пакета R. Написание пакета в первый раз - это не только удовольствие и вызов, но на самом деле это помогает сформулировать идеи о том, как разработать «правильный» пакет, который будет полезен для него самого и сообщества. Другими словами, даже если у кого-то нет опыта, все равно хорошая идея написать пакет, чтобы получить опыт в этом деле.
Грэм Уолш
1
Грэйм, на ваш взгляд, очень мотивирует неопытного программиста на R, который не решался бы заняться разработкой пакета. С другой стороны, хотя это, безусловно, будет полезно для себя, я отмечаю, что оба ответа подчеркивают (и я тоже могу это понять) необходимость программирования и науки в чистом, эффективном и, прежде всего, безошибочном коде. Таким образом, это открывает новый вопрос, который может быть «Как убедиться, что пакет R не содержит ошибок?», Предположительно работа сообщества, но увеличение количества новых пакетов может быть ограничением для этого.
Жан-Батист Лагерь
Это определенно возвращает вас к мысли, что существует большая разница между написанием пакета (скажем, для получения опыта) и принятием следующего шага и публикацией пакета. cbeleites говорит нам, что он делает свои пакеты «полу-открытыми», и я думаю, что его подход содержит элементы того, как сделать так, чтобы в пакете R не было ошибок (или, скорее, возможность ошибок минимизирована). По сути, какой-то этап рецензирования или тестирования является одним из способов обеспечения хорошего качества пакетов R. Если слишком много пакетов появятся без обзора, они могут быть не очень полезны.
Грэм Уолш
12

Помните, что есть вариант № 3; Вы можете попросить сопровождающего соответствующего пакета включить ваш код или данные.


источник
8

Мои личные триггеры для упаковки:

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

  • Я использую формальные требования пакета (документации), чтобы «заставить» меня очистить и документировать мой код.

Я согласен с @JohnRos, что существует большая разница между написанием пакета и его публикацией.

  • Я обычно упаковываю вещи рано, но потом делаю упаковку только «полупубликой». То есть он может быть доступен на внутреннем сервере (или на r-forge), поэтому мои коллеги могут получить доступ к пакету. Но я публикую в CRAN только после того, как пакет использовался близкими коллегами в течение нескольких месяцев или даже нескольких лет. Это не поднимает все ошибки в соответствии с пунктом № 3 @Nick Cox, но изрядное их количество.
    Версии пакета (я поставил дату после тире в номере версии) позволяют легко что-то исправить («чтобы сделать это и то, убедитесь, что вы введете хотя бы версию прошлой недели»)

  • Согласно моему рабочему контракту, мой работодатель имеет последнее слово при принятии решения о том, можно ли и как опубликовать пакет во внешнем мире.

Дело в том, где я не еще есть стратегия хорошо для упаковки данных.


Комментарии к вашему списку причин:

  • отсутствие других пакетов в том же подполе;

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

  • необходимость обмена с другими исследователями и обеспечения воспроизводимости экспериментов;

Определённо. Возможно, уже нужно делить между несколькими компьютерами, которые я использую.

И среди моментов, которые могут привести к противоположному решению:

  • часть используемых методов уже присутствует в некоторых других пакетах;

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

  • Количество новых функций недостаточно для обоснования создания нового независимого пакета.

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

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

cbeleites поддерживает Монику
источник
3
+1. Еще один хороший способ сделать пакеты полупубличными - это разместить исходный код пакета на GitHub - он облегчает поиск кода и побуждает других вносить свой вклад без неявной обработки пакета в CRAN.
Мэтт Паркер
7

Я бы сказал, создайте пакет всякий раз, когда вы выполняете достаточно большой набор похожих задач в R, чтобы вы могли воспользоваться пакетом, в котором вы можете помещать вещи в пространство имен (чтобы избежать конфликтов с функциями с одинаковыми именами), куда вы можете написать документация. У меня даже есть пакет на GitHub для связывания множества функций, которые не связаны, но я использую так часто, что я думал, что они заслуживают документацию, файлы man и т. Д.

Другой вариант использования может быть при отправке документа, если у вас есть ряд функций, вы можете легко создать пакет, включая документацию по этим функциям, примеры для каждой функции и учебное пособие по ее использованию. И вам не нужно помещать это на CRAN, как сказано в ответах выше. Это может быть здорово для воспроизводимости.

Три инструмента, которые я бы сказал, важны:

  • devtools pkg , чтобы упростить сборку пакетов (см. также вики на страницах devtools github)
  • roxygen2 pkg , чтобы упростить написание документации для вашего пакета
  • GitHub, Вы можете использовать install_github(или аналогично install_bitbucket и т. Д.) Для установки непосредственно из GitHub, который удобен для совместного использования с другими.
sckott
источник
5

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

R-конкретная причина, чтобы написать пакет R:

  • потому что ты пишешь на С

Каждый раз, когда вы используете иностранные языки, такие как C, C ++ или FORTRAN (в основном для высокопроизводительных вычислений), написание пакета в значительной степени стоит проблем. Если у вас есть более одной или двух функций, вы быстро получите файлы повсюду и зависимости между кодом R и C, которые сложно поддерживать и переносить.

gui11aume
источник
0

Одна причина, не упомянутая в других отличных ответах: у вас большой или сложный проект анализа данных. Упаковка, вначале, данных в виде пакета, а затем расширение с помощью полезных функций для преобразования, построения графика или вычисления конкретного анализа. Таким образом, вы получите документированную версию данных со всеми функциями, используемыми для расчета анализа, представленного в отчете. Тогда отчет (ы) из проекта может быть написан с использованием knitr или других пакетов для воспроизводимых исследований!

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

Къетил б Халворсен
источник