(Acest articol a fost publicat pentru prima dată pe R | Dr. Tom Palmerș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.
Introducere
Sau poate predați un curs care se desfășoară o dată pe an și are unele sesiuni practice R? Poate fi foarte frustrant atunci când reamenajați practicul dvs. după un an pentru a afla că mai multe dintre pachetele R pe care le folosește au fost actualizate, iar acum trebuie să rezolvați cum să remediați lucrurile. Pentru această situație am putea folosi
Renv pentru a înregistra pachetele și versiunile lor. Dar atunci participanții la curs vor trebui să utilizeze Renv ceea ce ar putea duce la o cameră plină de 30 de studenți care au toți Renv probleme. În mod alternativ, s -ar putea să vă instalați toate pachetele de la o singură dată, ceea ce înseamnă că le puteți restabili folosind data de instantaneu de la Public Posit Package Manager, dar puteți găsi participanții la cursul dvs. care se întreabă de ce utilizați pachete care au un an demodat. O altă soluție superbă este de a oferi participanților la curs un mediu R în care ați definit și testat lucrările dvs. practice. O astfel de soluție este oferită prin crearea practicii ca proiect într -un spațiu de lucru Cloud Posit, într -adevăr, Posit Cloud este atât de bun, încât aproape că face rularea rulării R practic plictisitor.
Soluția mea la aceste probleme este să alerg regulat R CMD check Pe pachetul/rulați -vă practic cu cele mai recente versiuni ale pachetelor necesare pe tot parcursul anului. În acest fel, sperăm să alegeți orice modificări ale pachetelor de dependență cu mult înainte de următoarea desfășurare a cursului dvs. (deși s -ar putea să aveți încă ghinion).
Verificarea pachetelor pe un program
Folosesc acțiunile și exemple de fluxuri de lucru din depozitul R-LIB/Acțiuni. Pentru verificarea unui pachet, există mai multe exemple, în exemple Directorul acelui depozit, pe care îl putem copia apoi apoi. Să folosim exemplul de check-full.yaml.
Copiați acest fișier într -un .github/fluxuri de lucru Director în depozit pentru pachetul dvs. Acum trebuie să activăm rularea programată. Modificați primul on: Blocați pentru a include cele două linii pe care le -am introdus mai jos.
on:
...
schedule:
- cron: "00 9 * * TUE"
Ce înseamnă această sintaxă? Din fericire, există multe site -uri web care vor descifra asta pentru noi, cum ar fi Crontab Guru. (NB. Puteți vedea o versiune completă a acestui fișier într -una din depozitele mele.)

Rularea practicilor pe un program
Să zicem că am pregătit o foaie de lucru practică într -un document de cvarto. În acest caz, vom folosi în plus acțiunile și exemplele din depozitul Quarto-Dev/Quarto-acțiuni.
Fișierul fluxului de lucru cu care am încheiat este prezentat mai jos și este în acest depozit de exemplu. În esență, este o versiune modificată a exemplului de redare R Markdown în R-LIB/Acțiuni.
on:
push:
branches:
- main
workflow_dispatch:
schedule:
- cron: "0 0 1 * *" # run on 1st day of month
name: Render
permissions:
contents: write
jobs:
build-deploy:
runs-on: ${{ matrix.config.os }}
name: ${{ matrix.config.os }}
strategy:
fail-fast: false
max-parallel: 1
matrix:
config:
- { os: macos-latest }
- { os: windows-latest }
- { os: ubuntu-latest }
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Setup R
uses: r-lib/actions/setup-r@v2
- name: Set up Quarto
uses: quarto-dev/quarto-actions/setup@v2
- name: Setup R packages
uses: r-lib/actions/setup-r-dependencies@v2
with:
upgrade: 'TRUE'
- name: Render practical and commit output documents into repo
shell: bash
run: |
# Render questions
Rscript -e 'quarto::quarto_render("exercise-01.qmd", output_file = "exercise-01-questions-${{ matrix.config.os }}.html", execute_params = list(solutions = FALSE, title = "Example exercise: Questions"))'
# Render solutions
Rscript -e 'quarto::quarto_render("exercise-01.qmd", output_file = "exercise-01-solutions-${{ matrix.config.os }}.html")'
# Commit output documents
git config --local user.name $GITHUB_ACTOR
git config --local user.email (email protected)
git pull
git add "*.html"
git commit * -m "Render practical on ${{ matrix.config.os }}" || echo 'No changes to commit'
git push origin || echo 'No changes to commit'
Crikey, asta este mult, hai să descompunem asta.
-
on:Secțiunea definește acest lucru va rula- pe împingeri către ramura principală,
- Dacă butonul de expediere a fluxului de lucru este dat clic în interfața GitHub,
- și o dată pe lună (la miezul nopții în prima zi de lună), așa cum este definit de a noastră
cronsintaxă
-
jobs:Secțiunea specifică- Vom rula acest lucru pe 3 sisteme de operare diferite, Windows (majoritatea studenților/participanților mei au laptopuri Windows, urmate de macOS), macOS și Ubuntu Linux. Mai multe informații despre acțiuni Github sunt disponibile;
max-parallel: 1spune că fiecare loc de muncă va funcționa pe rând (acest lucru nu este chiar necesar, ci doar pentru a fi în siguranță, deoarece voi comite documentele de ieșire în depozit)env:Specifică că acordăm permisiunea locurilor de muncă cu jetonul Githubsteps:definește ce va rula, care este-
Verificăm repo -ul
-
Apoi instalăm R și Quarto folosind acțiunile relevante
-
Configuram pachetele de dependență R. Nu folosesc Renvdeci acțiunea știe să facă asta pentru că am inclus un DESCRIERE Fișier în repo (la acțiunea pe care o falsificăm că Repo este un pachet R – acesta este un truc de la Hadley Wickham). Fișierul complet este în depozit, dar intrarea cheie este Importuri Lista pachetelor de Depnence Hard.
... Imports: knitr, quarto, sessioninfo ...
-
- specificăm
upgrade: 'TRUE'Pentru a instala întotdeauna cea mai recentă versiune a pachetelor de dependență. - Apoi, în sfârșit, redăm cele două versiuni ale documentului nostru de cvarto. Aici adăugăm numele sistemului de operare în numele fișierelor documentului de ieșire și comitem aceste fișiere din nou în depozit pentru înregistrările noastre. Trebuie să specificăm
shell: bashDeoarece altfel Windows Runner va folosi PowerShell și Sintaxa variabilă a mediului îngit configComenzile ar fi incorecte. De asemenea, avem nevoie de ungit pullÎnainte de a face angajamentul pentru că avem 3 locuri de muncă care rulează în serie, așa că vor exista fișiere noi/modificate în repo după prima și a doua joburi.
Haid!
Merită să subliniem că, în loc de un document quarto, practicul nostru ar putea fi într -un document R Markdown sau un script R (ar trebui doar să facem modificările relevante în fișierul de flux de lucru de mai sus, cum ar fi adăugarea Pandoc și modificarea comenzilor de redare).
Beneficii surpriză
Un efect secundar frumos al utilizării r-lib/actions/setup-r şi quarto-dev/quarto-actions/setup Acțiunile sunt că se actualizează la versiunea de lansare a R/Quarto pe măsură ce actualizările sunt lansate. Deci nu trebuie să vă faceți griji cu privire la actualizarea versiunii R/Quarto.
Acțiuni github necăji
Rezumat
