Перший вихідний код R пакунків для вивчення під час підготовки до написання власного пакету


47

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

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

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

  • Прості статистичні / технічні ідеї : Справа в тому, щоб дізнатися про механіку побудови пакетів. Розуміння пакету не повинно вимагати детальних специфічних знань щодо актуальної теми пакета.
  • Простий і звичайний стиль кодування : я шукаю щось трохи більше, Hello Worldале не набагато більше. Ідіосинкратичні хитрощі та хакі відволікають увагу при першому вивченні R-пакетів.
  • Хороший стиль кодування : Код добре написаний. Це виявляє як розуміння хорошого кодування взагалі, так і усвідомлення умов кодування в Р.

Запитання:

  • Які пакети було б добре вивчити?
  • Чому запропонований вихідний код упаковки було б добре вивчити стосовно вищезазначених критеріїв або будь-яких інших критеріїв, які можуть бути актуальними?

Оновлення (13.12.2010) Після коментарів Дірка я хотів уточнити, що без сумніву, багато пакетів було б добре вивчити спочатку. Я також погоджуюся, що пакети надаватимуть моделі для різних речей (наприклад, віньєток, класів S3, класів S4, тестування одиниць, Roxygen тощо). Тим не менш, було б цікаво прочитати конкретні пропозиції щодо хороших пакетів для початку та причини, з яких вони будуть хорошими для початку.

Я також оновив вищезазначене питання, щоб посилатися на "пакети", а не на "пакет".


2
Ще один спосіб подивитися на це - шукати конкретних авторів пакунків ; деякі автори дуже добре дотримуються кращих практик та пишуть чіткий код, і в цьому випадку ви можете вивчити всі їх матеріали.
Шейн

1
@Shane Добре. Будь-які пропозиції щодо того, які автори пакунків можуть бути корисними для вивчення при першому навчанні писати пакунки?
Джеромі Англім

Відповіді:


15

Я б запропонував переглянути зоопарк з наступних причин:

  1. Він має кілька добре написаних віньєток;
  2. Він використовує простір імен , використовуючи useDynLib, import, exportі S3method;
  3. Він має кілька одиничних тестів з використанням RUnit;
  4. Він надає хороші приклади того, як створити / документувати методи S3;
  5. Він має деякі дзвінки до коду С через .Callінтерфейс;
  6. Він містить демонстраційну схему;
  7. Він має на меті бути узгодженим з базовою установкою R (наприклад, функції поводяться аналогічно, не маскують / переосмислюють базові функції тощо)

Він не використовує роксиген, що дуже зручно, але 7 з 8 - це не погано. ;-)

Щоб відповісти вашим критеріям:

  1. Концепція проста: zooце клас, схожий на матрицю, замовлений чимось . Не потрібно спеціальних знань для домену.
  2. zoo Здається, є декілька ідіосинкратичних умов кодування, але нічого надзвичайного, що не заважає зрозуміти код.
  3. zoo має на меті бути максимально узгодженим з R.

1
Де можна знайти цей пакет?
Адам SA

@Adam: Я додав посилання на зоопарк у своїй відповіді. Ця сторінка також містить посилання на сторінку проекту R-Forge в зоопарку.
Джошуа Ульріх

9

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

Раніше я писав / підтримував / оновлював набір сценаріїв, які переходив би від проекту до проекту через source()функцію. Кінцевим підсумком цього стало те, що я закінчив би надто зайвими сценаріями, які висіли в різних місцях нашої мережевої диску. Ніколи не було зрозуміло, де знаходиться найсучасніший набір сценаріїв. З тих пір я перейшов до написання / підтримки пакету, що використовує роксиген. Це різко спростило моє життя і полегшило ділитися моєю роботою з колегами.

Виходячи з ваших критеріїв вище, я друге рекомендую переглянути пакунки, які написав Хедлі. Зокрема, я думаю, що читання через вікі Devtools було б дуже корисним. Код Гедлі добре задокументований, і кілька його пакунків використовують роксиген. Я думаю, що писати та підтримувати один документ для обох функцій R та документації на R набагато простіше, ніж розділити їх на два місця (файли .R та .RD).

Пакети Хедлі також служать деяким досить базовим поняттям і відносно легко їх відхилити (імхо), якщо ви шукаєте вказівники на ідеї технічного аспекту. Я ловлю себе на риття через plyr вихідний код , коли я шукав покажчик на roxygen документації або інших основних завдань.


Дякую. Вікі Devtools, зокрема, має безліч чудових ідей.
Джеромі Англім

@Jeromy - Прочитавши ваші останні публікації про відтворювані дослідження тощо (uber uber корисний, тож дякую!) Означає, що ви дуже швидко перейдете на роксиген. Я також мав би згадати, що Eclipse підтримує синтаксис роксигенів і зробив це досить легким переходом. Найскладніше завдання, яке я долав, - написання корисних і продуктивних віньєток. Я думаю, ви починаєте з набагато вищої точки стрибка, ніж я в цьому плані.
Чейз

2
Просто не читайте джерело ggplot2. Це змусить ваш мозок кровоточити
Хадлі

який чесний розробник R!
Лев5188

7

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

Відмовляючись убік, просто подивіться на кілька пакунків, якими ви самі користуєтесь та знайомі вам. Завантажити їх легко, або, якщо вам зручніше, ви також можете переглянути їх через веб-інтерфейс у R-Forge, RForge або Github.

Ви, швидше за все, укладете різні пакети для різних ідей. Деякі можуть допомогти вам у тому, як вони інтегрують, скажімо, віньєтку. Деякі можуть допомогти зі складеним кодом. Або одиничні тести. Або Роксиген. Їх налічується близько 2600, тож навіщо одержимість над одним найкращим?


Чудові моменти. Я планував досліджувати себе. І звичайно, розвідка - це половина задоволення. І я погоджуюся, що різні пакунки вчать різним речам. Я погоджуюся, що багато пакунків були б хорошими відправними точками. Я актуалізую своє запитання, щоб відобразити думку про те, що декілька пакетів задовольнять критеріям. Але наявність конкретних пропозицій може заощадити собі та іншим, що є новими для R-пакетів. Я також вважаю, що встановлені розробники R-пакетів можуть вигідніше коментувати переваги певного пакету для навчання.
Джеромі Англім

2
Тому що вам потрібно десь почати :)
hans0l0

2

Ще одна порада може поглянути на пакунки, які є вашими, залежно від взаємодії з ними, особливо якщо вони реалізують деякі пункти, про які Джошуа Ульріх згадували або написані відомими авторами. Це може бути корисно дізнатися, як це робиться у вашій галузі, щоб забезпечити певну сумісність. Часто люди будуть замислюватися над певними проблемами і читати міг їх вирішення буде корисним.


1

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


2
Дякую. Чому ви це рекомендуєте?
Джеромі Англім

4
Я б не рекомендував змінювати форму - навіть я не розумію, як це працює. Reshape2 набагато краще і дотримується багатьох інших хороших принципів розвитку.
hadley
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.