Organizarea dezvoltării R folosind SRCPKGS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe KFORNERși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Prezentare generală

Aceasta este o introducere a organizării proiectelor R folosind pachete sursă (alimentat de pachetul meu R srcpkgs). Se bazează pe note pentru o discuție pe care o am pe 2024-05-27 pentru întâlnirea de analiști ai grupului Bioinformatics Vital-IT.

Obiectivul este de a organiza proiecte R pentru:

  • Cod de reutilizare
  • Cod de partajare
  • crește robustetea
  • Activare analiză (cod) Reproductibilitate

Contextul este în mare parte pentru proiecte R orientate spre analiză.

Pachete r

Toți utilizatorii R folosesc pachete R, cele de bază, cum ar fi baza, statisticile, instrumentele și unele de la CRAN sau Bioconductor.

De ce ai vrea să folosești pachete R pentru propriul cod ???

Un pachet R este:

  • de sine stătător
    • Împiedică întregul cod aferent, documentația, datele și testele relevante
  • Dependențele sunt menționate în mod explicit și sunt ele însele pachete r

În ceea ce privește evoluția naturală a proiectelor de cod …

Opinia mea despre evoluția generală a proiectelor de analiză:

  • Începi cu un script unicsecvențial, fără funcții

  • La un moment dat (după ce ai scris sute sau mii de linii) îți dai seama că ai nevoie de unele Funcții

  • Apoi începeți să reutilizați aceste funcții pe proiecte prin copie/lipire. Acest lucru ridică o serie de probleme

    • Versiune: la un moment dat veți rezolva sau îmbunătăți o astfel de funcție
      • Poate fi dificil să ne amintim ce proiect conține cea mai recentă versiune
      • Ce dintre proiectele care conțin versiunile incorecte?
  • Atunci poate doriți, dacă lucrați într -o echipă, să partajați acest cod cu colegii sau să le folosiți

    • -> necesită unele documentarechiar și ticălos.
    • există o creștere responsabilitate. Ce se întâmplă dacă codul dvs. este greșit și are un impact asupra proiectelor colegilor dvs.? Un remediu este să scrieți teste pentru aceste funcții.
    • Aceste funcții sunt rareori independente, astfel încât nu puteți alege doar una
    • Toate aceste funcții sunt expus (adică public sau exportat)
      • Dacă începeți să utilizați o funcție de nivel scăzut în proiectul dvs. și că în următoarea versiune a fost refactorată și că această funcție a fost modificată sau eliminată, actualizarea codului partajat va rupe proiectul.
  • Din toate aceste motive, începeți să vă împachetați codul reutilizabil ca Pachet R.

    • Puteți adăuga documentație, teste, cod de grup logic. Aduce un spațiu de nume, astfel încât să puteți decide ce expuneți.
  • Dar … nu rezolvă cu adevărat versiune problemă

    • În R, pachetele trebuie să fie instalat (de exemplu, folosind install.packages()) înainte de a le putea folosi cu library(mypkg)
    • Pachetele au un număr de versiune (NB: acesta nu este același lucru cu Versiunea de cod)
    • Dacă utilizați versiunea v1 în proiectul A și versiunea V2 în proiectul B, trebuie să jonglezi cu versiunile (Instalare/Dezinstalare), desigur, există câteva instrumente pentru a face față acestora (Renv …), dar lucrează cu pachete externe (sau ai nevoie de câteva depozite personalizate private)
    • Și este foarte greoi. Să presupunem că, în proiectul dvs., găsiți o eroare în pachetul (instalat). Pentru a -l repara, trebuie
      • Obțineți codul sursă al pachetului
      • Încercați să vă reproduceți problema. Șansele sunt că aveți nevoie de datele proiectului dvs., trebuie să vă reproduceți sesiunea
      • În cele din urmă, dacă reușești să -l rezolvi. Trebuie să -l publicați, să -l instalați.
  • Abordarea mea este să folosesc ceea ce numesc Pachete sursă

    • Sunt pachete R normale, dar în loc să le instalați pe sistemul dvs. R, le încărcați direct de la sursa din sesiunea R.
    • a fost posibil de către infam Hadley Wickhamși al lui devtools::load_all() Funcție, care imită încărcarea unui pachet instalat
    • Acest lucru ajută foarte mult la toate aceste probleme:
      • Îți încorporați pachetele sursă în cadrul proiectului dvs. (ca submodule Gitvom vedea asta mai târziu) Acest lucru rezolvă versiunea/reproductibilitatea la nivelul codului reutilizabil: toate proiectele dvs. pot utiliza o versiune diferită
    • Dacă trebuie să remediați o eroare sau să vă îmbunătățiți și să vă sporiți codul reutilizabil, este simplu ca editarea codului pentru proiectul dvs. Și folosind srcpkgsputeți chiar reîncărca cu ușurință codul în sesiunile R existente, fără a pierde date calculate.
  • Până acum, bine. Apoi, pentru o ușurință de întreținere/modularitate, începeți să vă împărțiți codul reutilizabil pe categorie și să dezvoltați mai multe pachete R, de exemplu, unul pentru unele utilități DIDID, unul pentru încărcarea datelor din baza de date, una pentru o analiză specifică …

    • Aici srcpkgs devin utili, de când devtools a fost conceput pentru a gestiona un Pachet sursă unic Rnu o colecție/bibliotecă de pachete posibil inter-dependente.
      • În plus, are un mic hack util care vă permite să utilizați standardul library() Funcție pentru a încărca pachetele sursă. Astfel încât atunci când analizați este finalizat sau implementat în producțiecu pachetele dvs. instalate în mod standard, scriptul dvs. va continua să se uzeze fără nicio modificare.
  • Dar acest lucru nu rezolvă reproductibilitate pentru pachetele externe

    • Codul dvs. și biblioteca sursă folosesc cu siguranță pachete externe și depind și de versiunea dvs. R (și astfel de Bioconductor versiune)
    • De asemenea, poate depinde de arhitectura sistemului de operare (CPU …)
    • Acest lucru este în afara domeniului de discuție, dar o soluție pentru aceasta este să folosești un mediu de dezvoltare virtualizat: a docher Container (CF https://rocker-project.org/) care conține o versiune fixă a Rși din toate pachetele externe necesare.
    • Acum provocarea este de a sincroniza acea versiune de container Docker cu versiunea dvs. de bibliotecă sursă …
    • De asemenea, CF DevContainers

Rezumat

script --> script+functions --> script + source files --> R package --> R source package --> R source library ( + R docker env)

Eu (Karl Forner) lucrez în prezent ca consultant, mă contactez dacă doriți să vă ajut să utilizați R, organizarea dezvoltării, dezvoltarea de pachete R sau, în general, susțin eforturile dvs. de dezvoltare software.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.