(Acest articol a fost publicat pentru prima dată pe Blogul lui Yohannș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.
Codul de depanare într -o sarcină de zi cu zi (adesea dureroasă) pentru dezvoltatori. Într -un videoclip recent, am prezentat cum să depanați codul R în Rstudio IDE.
Au fost arătate două funcții native disponibile în R: browser()
şi debugonce()
. Sunt foarte utile pentru a depana codul.
debugonce()
este o funcție care vă permite să depanați o funcție data viitoare când este numită. Este util atunci când doriți să depanați o funcție fără a modifica codul acesteia.browser()
este o funcție care vă permite să întrerupeți execuția codului dvs. într -un anumit punct și să introduceți mediul de depanare. Este util atunci când doriți să inspectați starea codului dvs. la un moment dat.
Vom vedea cum să utilizăm aceste funcții în VSCODE, precum și să introducem „puncte de întrerupere”. Punctele de întrerupere sunt markeri pe care îi puteți seta în codul dvs. pentru a întrerupe execuția la o linie specifică. Acest lucru vă permite să inspectați starea codului dvs. în acel moment și să treceți prin linia de linie. Sunt foarte aproape de browser()
funcţie. De asemenea, pot fi utilizate în Rstudio IDE, dar trebuie să recunosc că nu le -am folosit niciodată.
IMPORTANT: Această postare pe blog presupune că aveți o configurație funcțională a VSCODE pentru utilizarea R.
Dacă nu îl aveți încă, vă recomand să consultați următoarele resurse:
Vom lucra cu un pachet de jucării foarte simplu numit {epidemiofuns}
. Acest pachet conține două funcții menite să fie utilizate în epidemiologie.
Primul este calculate_rr_in_df()
:
calculate_rr_in_df <- function( df, column_cases_exposed = "cases_exposed", column_total_exposed = "total_exposed", column_cases_unexposed = "cases_unexposed", column_total_unexposed = "total_unexposed") { risk1 <- compute_risk(df(, column_cases_exposed), df(, column_total_exposed)) risk2 <- compute_risk(df(, column_cases_unexposed), df(, column_total_unexposed)) df <- df %>% mutate( rr = risk1 / risk2 ) return(df) }
Această funcție calculează riscul relativ (RR) dintr -un cadru de date care conține număr de cazuri și persoane totale atât în grupuri expuse și neexpuse. Se numește o altă funcție compute_risk()
. Această funcție nu este principalul obiectiv al acestui post, dar este o funcție simplă care calculează riscul de la doi vectori.
compute_risk <- function(cases, total) { results <- cases / total return(results) }
Înainte de a vă arăta cum să utilizați debuggerul VSCODE specific, să vedem cum să depanați codul în terminalul R.
În același mod ca în RStudio, puteți utiliza debugonce()
Funcție pentru a depana calculate_rr_in_df()
funcţie. Cu toate acestea, mica bara de instrumente cu care ați fost obișnuit să fi dispărut. Va trebui să utilizați comenzi rapide de la tastatură pentru a vă deplasa pe depanarea codului dvs.
Iată comenzile rapide de la tastatură pe care trebuie să le depanați codul în terminalul R al VSCODE:
După ce ai aceste comenzi rapide în cap (sau pe un memento lângă tine!), Puteți începe să depanați codul!
Pentru a putea folosi funcția mea cu ușurință, am adăugat în pachet un set de date de jucării numit toy_dataset
.
Nu am arătat utilizarea browser()
Funcționați în videoclip, dar modul de procesare este același.
După cum puteți vedea, acest mod de a depana codul nu este ușor de utilizat. Trebuie să vă amintiți comenzile rapide și nu aveți bara de instrumente frumoasă cu care sunteți obișnuit în Rstudio.
Acum să trecem la debuggerul specific VSCODE, pentru a vedea dacă este un mod mai distractiv de a explora codul nostru!
Premise
Înainte de a începe, asigurați -vă că aveți următoarele premise:
remotes::install_github("ManuelHentschel/vscDebugger")
Lansați o sesiune de depanare
Lansarea unei sesiuni de depanare este foarte ușoară. Trebuie doar să faceți clic pe pictograma „Rulați și debug” din meniul din stânga VSCODE, apoi selectați „R Debugger”.
Deoarece lucrăm cu un pachet R, trebuie să selectăm opțiunea „Debug R-Package”. Aceasta va lansa o sesiune de depanare în contextul pachetului, adică un apel la funcție pkgload::load_all()
va fi realizat, asigurând aprovizionarea tuturor funcțiilor din mediul nostru. Dacă lucrați cu un script doar R, puteți selecta opțiunea „Debug R-File”.
Folosiți puncte de întrerupere
Punctele de întrerupere sunt markeri pe care îi puteți seta în codul dvs. pentru a întrerupe execuția la o linie specifică. Acest lucru vă permite să inspectați starea codului dvs. în acel moment și să treceți prin linia de linie. Adăugarea unui punct de rupere este foarte ușoară. Trebuie doar să faceți clic pe marginea din stânga a liniei pe care doriți să o setați un punct de întrerupere. Va apărea un punct roșu, ceea ce indică faptul că a fost stabilit un punct de întrerupere. Acest lucru este echivalent al adăugărilor a browser()
Funcționați în codul dvs.
Notă importantă: Punctele de întrerupere nu sunt salvate în codul dvs. Acestea sunt stabilite doar în contextul sesiunii de depanare. Aceasta înseamnă că, dacă închideți sesiunea de depanare, punctele de întrerupere vor fi eliminate. Acest lucru este diferit de browser()
Funcție, care este salvată în codul dvs.!
După lansarea sesiunii de depanare, puteți vedea că culoarea barei de jos s -a schimbat. Mai mult, a fost deschis un nou terminal specific, numit „Consola de depanare”. Aici puteți vedea ieșirea codului dvs. și unde puteți introduce comenzi pentru a inspecta starea codului dvs. Anterior, lucram în terminalul R clasic, pentru că nu folosim instrumentul specific de depanare VSCODE.
Acest mod de a depana codul este mult mai ușor de utilizat decât cel anterior. Puteți vedea starea codului dvs. în orice moment și puteți să -i parcurgeți linia cu linie. De asemenea, puteți inspecta variabilele din codul dvs. și puteți vedea valorile acestora. Punctele de întrerupere sunt foarte ușor de utilizat și nu sunt intruzive ca utilizarea browser()
poate fi. Această caracteristică, cuplată la utilizarea paletei de comandă, facilitează procesul de depanare.
Dacă vă pierdeți între utilizarea paletei de comandă rstudio și paleta de comandă vscode, mai jos este o corespondență între cele două:
Utilizare debugonce()
şi browser()
Folosind debugonce()
şi browser()
Funcțiile în vscode sunt foarte asemănătoare cu utilizarea lor în rStudio. Le puteți folosi în același mod și vor funcționa așa cum era de așteptat.
Afișarea datelor.Frames and Plots în consola de depanare
Când depanați codul, puteți afișa date.Frames și comploturi în consola de depanare.
Nativ, datele.Frames sunt afișate într-un mod foarte compact, care nu este foarte ușor de utilizat. Cu toate acestea, la fel ca într-un videoclip anterior, puteți face clic dreapta pe date.
Pe vscode -ul meu (lucrez la Windows 11), datele și parcelele nu au fost deschise în mod implicit în fereastra mea actuală VSCODE. A trebuit să editez RProfile
fișier pentru a adăuga următoarele:
if (Sys.getenv("VSCODE_DEBUG_SESSION") == "1") { Sys.setenv(TERM_PROGRAM = "vscode") source(file.path(Sys.getenv(if (.Platform$OS.type == "windows") "USERPROFILE" else "HOME"), ".vscode-R", "init.R")) }
Pentru a avea acces la RProfile
fișier, puteți rula usethis::edit_r_profile()
în consola R. Acest lucru va deschide RProfile
Fișier în editorul dvs. implicit. Puteți adăuga apoi codul de mai sus în fișier și îl puteți salva (sesiunea dvs. trebuie repornită pentru a -l utiliza).
Experiența programării R în VSCODE a crescut remarcabil de robust în ultimii ani. În timp ce depanarea a fost anterior un avantaj esențial al RStudio, extensia de depanare R a închis efectiv acest decalaj.
Când comparați cele două IDE special pentru depanare: – Vscode Oferă o experiență elegantă de depanare vizuală cu puncte de întrerupere intuitive și un panou de inspecție variabilă curată – Rstudio Oferă o experiență mai integrată, dar în esență aceleași funcționalități de bază.
Pentru cei care iau în considerare trecerea de la RStudio la VSCODE, fluxul de lucru de depanare nu ar trebui să mai fie o preocupare. Ambele medii oferă acum instrumente puternice pentru parcurgerea codului dvs. și identificarea eficientă a erorilor.
Sper ca această postare pe blog să vă ajute să vă faceți procesul de depanare mai puțin stresant și mai productiv! Dacă aveți sfaturi sau întrebări suplimentare de depanare VSCODE, nu ezitați să vă adresați.
Debugging fericit!