Первые R пакеты исходного кода для изучения при подготовке к написанию собственного пакета

47

Я планирую начать писать R пакетов.

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

Мои критерии для хороших пакетов для изучения:

  • Простые статистические / технические идеи : цель состоит в том, чтобы узнать о механике конструкции упаковки. Понимание пакета не должно требовать подробных подробных знаний о предметной области пакета.
  • Простой и традиционный стиль кодирования : я ищу что-то немного больше, Hello Worldно не намного больше. Особые хитрости и хаки будут отвлекать при первом изучении R пакетов.
  • Хороший стиль кодирования : код хорошо написан. Это раскрывает как понимание хорошего кодирования в целом, так и понимание правил кодирования в R.

Вопросов:

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

Обновление (13/12/2010) Следуя комментариям Дирка, я хотел прояснить, что, без сомнения, много пакетов было бы полезно изучить в первую очередь. Я также согласен, что пакеты будут предоставлять модели для разных вещей (например, виньетки, классы S3, классы S4, модульное тестирование, Roxygen и т. Д.). Тем не менее, было бы интересно прочитать конкретные предложения о хороших пакетах и ​​причинах, по которым они будут хорошими для начала.

Я также обновил вопрос выше, чтобы ссылаться на «пакеты», а не «пакет».

Джером англим
источник
2
Другой способ посмотреть на это - поискать конкретных авторов пакетов ; некоторые авторы очень хорошо следуют передовым методам и пишут четкий код, и в этом случае вы можете изучить все их материалы.
Шейн
1
@ Шейн Хороший вопрос. Какие-нибудь предложения, на каких авторах пакетов было бы хорошо изучить, сначала учась писать пакеты?
Jeromy Anglim

Ответы:

15

Я бы посоветовал посмотреть на пакет зоопарка по следующим причинам:

  1. У этого есть несколько хорошо написанных виньеток;
  2. Он использует пространство имен , используя useDynLib, import, exportи S3method;
  3. Он имеет несколько юнит-тестов RUnit;
  4. Это обеспечивает хорошие примеры того, как создать / документировать методы S3;
  5. Он имеет несколько вызовов кода C через .Callинтерфейс;
  6. Он содержит (черчение) демо;
  7. Он направлен на согласование с установкой core R (например, функции ведут себя одинаково, он не маскирует / не переопределяет базовые функции и т. Д.)

Он не использует roxygen, что очень удобно, но 7 из 8 - неплохо. ;-)

Чтобы ответить на ваши критерии:

  1. Концепция проста: zooэто матричный класс, упорядоченный чем-то . Не требуется знание предметной области.
  2. zoo похоже, есть несколько своеобразных соглашений по кодированию, но ничего сверх того, что мешает понять код.
  3. zoo стремится быть максимально совместимым с R.
Джошуа Ульрих
источник
1
Где можно найти этот пакет?
Адам С.А.
@Adam: я добавил ссылку на зоопарк в своем ответе. На этой странице также есть ссылка на страницу проекта R-forge в зоопарке.
Джошуа Ульрих
9

Я не считаю себя признанным разработчиком пакетов R, но недавно прошел процесс написания и поддержки пакета для моей рабочей среды.

Ранее я писал / поддерживал / обновлял набор сценариев, которые я передавал из проекта в проект через source()функцию. Конечным результатом этого было то, что я в итоге получал в основном избыточные скрипты, которые зависали в разных местах на наших сетевых дисках. Никогда не было ясно, где находится самый современный набор сценариев. С тех пор я перешел на написание / обслуживание пакета с использованием roxygen. Это значительно упростило мою жизнь и позволило мне поделиться своей работой с коллегами.

Основываясь на ваших критериях выше, я рекомендую пересмотреть пакеты, написанные Хэдли. В частности, я думаю, что чтение вики devtools было бы очень полезно. Код Хэдли хорошо документирован, и некоторые из его пакетов используют roxygen. Я думаю, что написание и ведение одного документа как для функций R, так и для документации R гораздо проще, чем разделять их на две части (файлы .R и .RD).

Пакеты Хэдли также служат некоторым довольно базовым понятиям и относительно просты в отборе (imho), если вы ищете указатели на идеи технических аспектов. Я копаюсь в исходном коде plyr, когда ищу указатель на документацию roxygen или другие фундаментальные задачи.

гнаться
источник
Благодарю. В частности, на вики devtools есть много замечательных идей.
Jeromy Anglim
@Jeromy - Прочитав ваши последние посты о воспроизводимых исследованиях и т. Д. (Uber Uber полезно, поэтому спасибо!) Означает, что вы очень быстро перейдете на содержание кислорода. Я должен был также упомянуть, что Eclipse поддерживает синтаксис roxygen и сделал его довольно простым переходом. Самая трудная задача, которую я преодолел, - это написание виньеток, которые полезны и продуктивны. Я полагаю, вы начинаете с гораздо более высокого уровня, чем я в этом отношении.
Погоня за
2
Только не читайте источник ggplot2. Это заставит ваш мозг кровоточить
хэдли
какой честный разработчик R!
Leo5188
7

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

Шучу в сторону, просто взгляни на несколько пакетов, которые ты сам используешь и с которыми знаком. Скачать их легко, или, если вы предпочитаете, вы также можете просматривать их через веб-интерфейс в R-Forge, RForge или Github.

Скорее всего, вы получите разные пакеты для разных идей. Некоторые могут помочь вам с тем, как они интегрируют, скажем, виньетка. Некоторые могут помочь с скомпилированным кодом. Или юнит-тесты. Или Roxygen. Их около 2600, так зачем одерживать верх над одним лучшим?

Дирк Эддельбюттель
источник
Великолепные моменты. Я планировал исследовать себя. И, конечно же, исследование - это половина удовольствия. И я согласен, что разные пакеты учат разным вещам. Я согласен, что многие пакеты будут хорошей отправной точкой. Я обновлю свой вопрос, чтобы отразить идею, что несколько пакетов будут соответствовать критериям. Но некоторые конкретные предложения могут спасти меня и других новичков в R-пакетах. Я также думаю, что признанные разработчики пакетов R лучше могут комментировать преимущества данного пакета для целей обучения.
Jeromy Anglim
2
Потому что вы должны начать где-нибудь :)
hans0l0
2

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

Laurent
источник
1

я бы порекомендовал Хэдли изменить форму пакета. Вы можете найти источник на https://github.com/hadley/reshape

Ramnath
источник
2
Благодарю. Почему вы рекомендуете это?
Jeromy Anglim
4
Я бы не советовал менять форму - даже я не понимаю, как это работает. Reshape2 намного лучше и следует гораздо более хорошим принципам разработки.
Хэдли