Verificarea pachetelor R și a practicilor dvs. pe un program folosind acțiuni Github

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

(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.)

Captură de ecran de pe site -ul Crontab Guru.

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ă cron sintaxă
  • 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: 1 spune 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 Github
    • steps: 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: bash Deoarece altfel Windows Runner va folosi PowerShell și Sintaxa variabilă a mediului în git config Comenzile ar fi incorecte. De asemenea, avem nevoie de un git 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

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.