Kendi paketini yazmaya hazırlanmak için ilk R paketleri kaynak kodu


47

R paketleri yazmaya başlamayı planlıyorum.

Paket inşaat sözleşmelerini öğrenmek için mevcut paketlerin kaynak kodunu incelemenin iyi olacağını düşündüm.

İyi paketlerin çalışması için kriterlerim:

  • Basit istatistiksel / teknik fikirler : Amaç, paket inşasının mekaniği hakkında bilgi edinmektir. Paketin anlaşılması, paketin asıl konusu hakkında ayrıntılı yüksek etki alanına özgü bilgiler gerektirmemelidir.
  • Basit ve geleneksel kodlama stili : Çok fazla bir şey Hello Worlddeğil biraz daha fazlasını arıyorum . Kendine özgü püf noktaları ve kesmek, ilk R paketlerini öğrenirken rahatsız edici olacaktır.
  • İyi kodlama stili : Kod iyi yazılmış. Hem genel olarak iyi kodlama anlayışı hem de R kodlama kurallarına ilişkin bir farkındalık ortaya koyar.

Sorular:

  • Hangi paketleri çalışmak iyi olurdu?
  • Önerilen paket kaynak kodunun yukarıda belirtilen kriterlere ya da ilgili olabilecek diğer kriterlere göre çalışmak neden iyi olur?

Güncelleme (13/12/2010) Dirk'ün yorumlarının ardından, birçok paketin ilk önce çalışmanın iyi olacağından kuşku duymuyorum. Ayrıca paketlerin farklı şeyler için modeller sunacağını kabul ediyorum (örneğin, vinyet, S3 sınıfı, S4 sınıfı, birim testi, Roxygen vb.). Yine de, başlangıç ​​için iyi paketler ve neden başlangıç ​​için iyi paketler olacağına ilişkin somut önerileri okumak ilginç olacaktır.

Ayrıca, yukarıdaki soruyu "paket" yerine "paket" e atıfta bulunmak üzere güncelledim.


2
Buna bakmanın başka bir yolu da özel paket yazarlarına bakmaktır ; Bazı yazarlar, en iyi uygulamaları takip etmek ve açık kod yazmak konusunda çok iyidir, bu durumda tüm materyallerini inceleyebilirsiniz.
Shane,

1
@Shane İyi nokta. Paket yazmayı ilk öğrenirken, hangi paket yazarlarının çalışabileceği konusunda bir öneriniz var mı?
Jeromy Anglim,

Yanıtlar:


15

Aşağıdaki nedenlerle hayvanat bahçesi paketine bakmanızı öneririm :

  1. Birkaç iyi yazılmış vinyet vardır;
  2. Bu kullanarak bir ad kullanan useDynLib, import, exportve S3method;
  3. Kullanarak çeşitli birim testleri vardır RUnit;
  4. S3 yöntemlerinin nasıl oluşturulacağı / belgeleneceği konusunda iyi örnekler sunar;
  5. .CallArayüz üzerinden C koduna bazı çağrılar var ;
  6. Bir (komplo) demosu içerir;
  7. Temel R kurulumuyla tutarlı olmayı hedefler (örneğin, fonksiyonlar benzer davranır, temel fonksiyonları maskelemez / geçersiz kılmaz vb.)

Çok kullanışlı bir oksijen kullanıyor, fakat 8 taneden 7'si fena değil. ;-)

Kriterlerinize cevap vermek için:

  1. Kavram basittir: zoobir şeyin sipariş ettiği matris benzeri bir sınıftır . Alana özel bilgi gerekmez.
  2. zoo birkaç kendine özgü kodlama sözleşmesi varmış gibi görünüyor, ancak kodun anlaşılmasını engelleyen hiçbir şey yok.
  3. zoo mümkün olduğunca R ile tutarlı olmayı hedefler.

1
Biri bu paketi nerede bulabilir?
Adam SA,

@Adam: Cevabımda hayvanat bahçesine bir link ekledim. Bu sayfada ayrıca, hayvanat bahçesinin R-forge proje sayfasına bir bağlantı var.
Joshua Ulrich

9

Kendimi yerleşik bir R paketi geliştiricisi olarak görmüyorum, ancak son zamanlarda çalışma ortamım için bir paket yazma ve sürdürme sürecinden geçtim.

Önceden, projeden projeye projeden source()fonksiyona geçeceğim bir dizi senaryo yazıyor / bakım yapıyor / güncelliyordum . Bunun sonucu, ağ sürücülerimizdeki çeşitli yerlerde takılan çoğunlukla gereksiz komut dosyaları ile sonuçlanmamdı. En güncel komut dizilerinin bulunduğu yer asla belli değildi. O zamandan beri, oksijen kullanan bir paket yazmak / sürdürmek için göç ettim. Hayatımı büyük ölçüde basitleştirdi ve işimi meslektaşlarımla paylaşmayı kolaylaştırdı.

Yukarıdaki kriterlerinize dayanarak, Hadley’nin yazdığı paketleri gözden geçirmenizi tavsiye ediyorum. Özellikle, devtools wiki üzerinden okumanın çok faydalı olacağını düşünüyorum. Hadley'nin kodu iyi belgelenmiştir ve paketlerinin birçoğu oksijen kullanmaktadır. Hem R işlevleri hem de R belgeleri için bir belge yazmanın ve korumanın, iki konuma (.R ve .RD dosyaları) ayrılmasından çok daha kolay olduğunu düşünüyorum.

Hadley'nin paketleri de bazı temel kavramlara hizmet eder ve teknik yön fikirleri hakkında fikir edinmek istiyorsanız imha etmek oldukça kolaydır. Oksijen belgelerinde veya diğer temel görevlerde bir işaretçi ararken kendimi plyr kaynak kodunda kazıyorum.


Teşekkürler. Özellikle devtools wiki'nin birçok harika fikri var.
Jeromy Anglim

@Jeromy - Yeniden üretilebilir araştırmalar vb. Hakkındaki son yazılarınızı okuduğunuzdan (uber uber çok faydalısınız!) Çok hızlı bir şekilde roksijene gireceğiniz anlamına gelir. Eclipse'in oksijen sözdizimini desteklediğini ve oldukça kolay bir geçiş yaptığını da söylemeliydim. Üstesinden geldiğim en zor görev faydalı ve üretken vinyet yazmak. Bu konuda benim olduğumdan çok daha yüksek bir atlama noktasından başladığını hayal ediyorum.
Chase,

2
Sadece ggplot2 kaynağını okuma. Beyninin kanamasına neden olacak
hadley

Ne dürüst bir R geliştirici!
Leo5188 11:13

7

Neden deneysel güdümlü rastgele örnekleme yaklaşımı kullanmıyorsunuz? Birkaç tane seç ve hangisinin işe yaradığını gör.

Şaka yapıyorum, sadece kullandığın ve aşina olduğun birkaç pakete bak. Bunları indirmek kolaydır, veya isterseniz R-Forge, RForge veya Github adresindeki bir web arayüzü aracılığıyla da görüntüleyebilirsiniz.

Büyük olasılıkla farklı fikirler için farklı paketlerle biteceksiniz. Bazıları bir vignette gibi düzelme biçiminde size yardımcı olabilir. Bazıları derlenmiş kodlarda yardımcı olabilir. Veya birim testleri. Veya Roxygen. Bunların yaklaşık 2600 tanesi var, o zaman neden tek bir en iyinin üzerine takıntı yapıyorsunuz?


Harika noktalar Kendimi keşfetmeyi planlıyordum. Ve elbette, keşif eğlencenin yarısı. Ve farklı paketlerin farklı şeyler öğrettiği konusunda hemfikirim. Birçok paketin iyi bir başlangıç ​​noktası olacağına katılıyorum. Birden fazla paketin kriterleri yerine getireceği fikrini yansıtacak şekilde sorumu güncelleyeceğim. Ancak bazı somut önerilere sahip olmak, kendimi ve başkalarını R paketlerinde yeni bir süre kurtarabilir. Ayrıca, R paketlerinin geliştiricilerinin verilen bir paketin yararları hakkında bilgi edinmek için daha iyi bir konumda olduklarını düşünüyorum.
Jeromy Anglim,

2
çünkü bir yerden başlamalısın :)
hans0l0

2

Başka bir öneri, sizin belirleyeceğiniz paketlere bakmak olabilir, özellikle de Joshua Ulrich'in bahsettiği ya da tanınmış yazarlar tarafından yazılmış bazı öğeleri kullanıyorsa , bunlarla etkileşime girecek veya etkileşime girecek olabilir . Bazı uyumluluklar sağlamak için alanınızda işlerin nasıl yapıldığını öğrenmek yararlı olabilir. Çoğu zaman insanlar belirli konular hakkında düşünmüş olacak ve çözümlerini okumak çok yararlı olacaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.