(Acest articol a fost publicat pentru prima dată pe R | Dr Tom Palmerși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Introducere
În postările anterioare, am descris cum să utilizați funcția autonomă de scripturi Python în uv Manager de pachete Python pentru a crea medii virtuale pentru a reda documentele Quarto folosind nucleul Jupyter nbstata și kernel-ul python3. În acest post vă descriu cum să faceți același lucru pentru scripturile R pentru a reda documentele Quarto care rulează cod R folosind motorul knitr.
Am descoperit recent că acum există trei manageri de pachete inspirați de UV pentru R; ir, uvr și rv (… poate sunt mai multe?). Mă voi concentra asupra primelor două, deoarece permit definirea de scripturi R autonome. Găsesc scripturile autonome o modalitate rapidă și ușoară de a defini dependențele de proiect și foarte rar am nevoie de o înregistrare a versiunilor exacte ale pachetului.
În următoarele exemple presupun că creăm un script R, redă.Rcare conține unul sau mai multe apeluri către quarto::quarto_render() pentru o prelegere sau un tutorial. Pentru pachetele de dependență R includ pachetele de care are nevoie documentul în sine, plus pachetele quarto și knitr.
Exemplu de script R autonom folosind ir
Pentru a defini dependențe pentru irîn partea de sus a scriptului începe fiecare linie de comentariu cu #| apoi scrieți o listă sub a packages cheie după cum urmează – aceasta este lista de pachete de care am nevoie pentru unul dintre practicile mele despre datele lipsă.
#| packages: #| - gtsummary #| - haven #| - tidyverse #| - VIM #| - quarto #| - knitr # Rest of R code follows ... # ... essentially one or sometimes multiple quarto::quarto_render() calls
Acest script poate fi rulat cu
ir run render.R
Exemplu de script R autonom folosind uvr
uvr urmează aceeași sintaxă de dependență ca uv. Fiecare linie începe cu a # comentariu, iar dependențele sunt definite ca o matrice TOML de șiruri între # /// script şi # ///. Deci, vârful nostru redă.R scriptul arată după cum urmează.
# /// script # dependencies = ( # "gtsummary", # "haven", # "tidyverse", # "VIM", # "quarto", # "knitr", # ) # /// # Rest of R code follows ... # ... essentially one or sometimes multiple quarto::quarto_render() calls
Acest script poate fi rulat cu
uvr run render.R
Automatizare cu just într-o structură complexă de directoare
Pentru fiecare curs pe care îl predau am prelegerea sau tutorialul într-un subdirector. Pentru a rula fiecare script, aș putea rula comenzile shell date mai sus. Pentru a îmbunătăți ușor eficiența, constat că punerea următorului fișier just în partea de sus a structurii de directoare economisește un pic de tastare. Prima reteta, renderfolosește biblioteca mea de sistem R, ceilalți rezolvă pachetele prin ir/uvr.
render dir=invocation_directory():
cd "{{ dir }}" && Rscript render.R
ir dir=invocation_directory():
cd "{{ dir }}" && ir run render.R
uvr dir=invocation_directory():
cd "{{ dir }}" && uvr run render.R
Pot pur și simplu să tastez just ir sau just uvr pentru a reda prelegerea/tutorialul dat indiferent de directorul în care mă aflu.
Bonus 1 – Exemplu de utilizare a unui document autonom Quarto ir
ir ne permite inteligent să definim alternativ dependențele din antetul YAML al unui document Quarto, sub un ir cheie. În acest caz, putem elimina pachetul quarto, deoarece am putea presupune că vom reda acest document făcând clic pe Face butonul din RStudio sau folosind quarto render ... în terminal.
---
title: My lecture/tutorial
ir:
packages:
- gtsummary
- haven
- tidyverse
- VIM
- knitr
---
Rest of Quarto document follows ...
Spune că acest document Quarto este tutorial.qmd l-am reda apoi cu
ir render tutorial.qmd
Mai multe detalii sunt oferite în documentele ir Quarto.
Bonus 2 – Faceți executabil scriptul R
Cu ambele
ir şi uvr (și într-adevăr
uv) putem face opțional redă.R executabil de script, să spunem redenumirea în simplu faceprin adăugarea shebang-ului relevant chiar în partea de sus a fișierului.
Pentru ir adaugam noi
#!/usr/bin/env -S ir run
iar pentru uvr adaugam noi
#!/usr/bin/env -S uvr run
Apoi facem scriptul executabil
chmod +x render
și rulați-l cu
./render
Rezumat
Am arătat cum să creez un script R autonom și, opțional, executabil, pentru a reda documente Quarto folosind motorul knitr care gestionează automat pachetele R necesare. Această funcționalitate este oferită atât de ir şi uvr Manageri de pachete R. Această abordare ar funcționa și pentru documentele RMarkdown (desigur că ar trebui să schimbați pachetul quarto cu pachetul rmarkdown din lista de dependențe).
