R Academy · Lektion

Pakkestruktur med usethis og devtools

Opret en pakkemappe, DESCRIPTION og NAMESPACE med hjælp fra usethis.

Lektion 1 af 413 trin

Pakkestruktur med usethis og devtools er en gratis R Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i R Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. R Academy-kurset indeholder 4 lektioner i alt.

Hvorfor oprette en R-pakke?

En R-pakke er den almindelige måde at dele genanvendelig kode, data og dokumentation på. Selvom du aldrig udgiver pakken på CRAN, håndhæver pakning af koden gode praksisser: dokumenterede funktioner, enhedstest og et tydeligt namespace. devtools og usethis gør processen enkel.

Oprettelse af pakkestrukturen

usethis::create_package('~/mypackage') opretter en mappe med alle nødvendige filer: DESCRIPTION, NAMESPACE og en R/-mappe. Det nye projekt åbnes automatisk i RStudio.

# library(usethis)
# library(devtools)
#
# usethis::create_package('~/mypackage')
#
# Creates:
# mypackage/
#   DESCRIPTION     <- package metadata
#   NAMESPACE       <- exported symbols (auto-managed by roxygen2)
#   R/              <- your R source files
#   .Rbuildignore   <- files to exclude from package builds

Filen DESCRIPTION

Filen DESCRIPTION er pakkens manifest. Dens vigtigste felter:

  • Title — beskrivelse på én linje (med stort begyndelsesbogstav i hvert betydningsbærende ord, uden punktum)
  • Version — semantisk version (f.eks. 0.1.0)
  • Author / Authors@R — pakkens forfatter
  • Depends — påkrævet R-version
  • Imports — pakker, som din pakke kalder
  • License — f.eks. MIT, GPL-3
# DESCRIPTION example:
# Package: mypackage
# Title: Tools for Analyzing Survey Data
# Version: 0.1.0
# Authors@R: person('Alice', 'Smith', email='alice@example.com', role=c('aut','cre'))
# Description: Provides helper functions for cleaning and summarizing survey responses.
# Depends: R (>= 4.1.0)
# Imports: dplyr, stringr
# License: MIT + file LICENSE

Tilføjelse af funktioner med use_r()

usethis::use_r('my_function') opretter R/my_function.R og åbner filen til redigering. Hver fil i R/ bør indeholde én funktion eller en lille gruppe af tæt relaterede funktioner. Brug ikke source()-kald i pakkefiler.

# usethis::use_r('add')  # creates R/add.R
#
# Write your function in R/add.R:
# add <- function(x, y) {
#   if (!is.numeric(x) || !is.numeric(y)) stop('x and y must be numeric')
#   x + y
# }
#
# Then document it with roxygen2 comments above the function.

devtools::load_all() — udviklingsloopet

devtools::load_all() (tastaturgenvejen Ctrl+Shift+L i RStudio) simulerer installation og indlæsning af pakken. Den indlæser alle filer i R/ i den aktuelle session uden faktisk at installere pakken. Dette er kernen i den iterative udviklingscyklus.

# Development loop:
# 1. Edit R/add.R
# 2. devtools::load_all()   # Ctrl+Shift+L
# 3. add(2, 3)              # test interactively
# 4. Go to step 1
#
# load_all() is much faster than install.packages()
# because it skips compilation and installation steps.

devtools::check() — det komplette eftersyn

devtools::check() (Ctrl+Shift+E) kører R CMD check — den omfattende kontrolpakke, som CRAN bruger. Den kontrollerer dokumentation, test, eksempler, namespace og meget mere. Sigt efter 0 ERRORs, 0 WARNINGs og så få NOTEs som muligt.

# devtools::check()  # runs R CMD check
#
# Common errors to fix:
# ERROR:   Undocumented function 'add' => add roxygen2 docs
# WARNING: No NAMESPACE file => run devtools::document()
# NOTE:    No examples => add @examples in roxygen2
# NOTE:    Dependencies in DESCRIPTION not used => clean up Imports

Strukturen i R/-mappen

Alle kildefiler placeres i R/. Almindelige konventioner:

  • Én fil pr. funktionsfamilie (f.eks. R/utils.R, R/plot_helpers.R)
  • R/data.R til dokumentation af datasæt
  • R/zzz.R til hooks for .onLoad() og .onAttach()

Ingen undermapper i R/ — alle filer ligger på øverste niveau.

# Typical R/ directory for a small package:
# R/
#   add.R          <- add() function + documentation
#   subtract.R     <- subtract() function
#   utils.R        <- internal helpers (not exported)
#   data.R         <- documentation for bundled datasets
#   package.R      <- @docType package documentation

man/-mappen

man/ indeholder .Rd-hjælpefiler, én for hver eksporteret funktion. Du bør aldrig redigere disse manuelt — de genereres ud fra roxygen2-kommentarer af devtools::document(). Commit dem sammen med din kildekode.

# man/ is auto-generated:
# man/
#   add.Rd         <- generated from @title, @param etc. in R/add.R
#   subtract.Rd    <- generated from R/subtract.R
#
# Regenerate with:
# devtools::document()  # also updates NAMESPACE
#
# Never edit .Rd files directly -- changes will be overwritten
cat('Always edit roxygen2 comments, never man/*.Rd files directly
')

tests/-mappen

usethis::use_testthat() opretter mappen tests/testthat/ og tilføjer testthat til DESCRIPTION. Skriv testfiler med navnet test-*.R i denne mappe. Kør alle test med devtools::test() (Ctrl+Shift+T).

# Set up testing:
# usethis::use_testthat()
#
# Creates:
# tests/
#   testthat.R            <- runner script (do not edit)
#   testthat/
#     test-add.R          <- your test file
#
# Run tests:
# devtools::test()
# devtools::test_file('tests/testthat/test-add.R')

Korrekt tilføjelse af afhængigheder

Brug aldrig library(pkg) i pakkens kildefiler. Gør i stedet følgende:

  • Tilføj pakken til Imports i DESCRIPTION med usethis::use_package('dplyr')
  • Kald funktioner med pkg::function(), eller tilføj @importFrom pkg function i roxygen2
  • Brug Suggests til pakker, der kun er nødvendige i eksempler eller test
# Add a dependency:
# usethis::use_package('stringr')           # adds to Imports
# usethis::use_package('ggplot2', 'Suggests') # adds to Suggests
#
# In R/my_function.R:
# clean_names <- function(x) {
#   stringr::str_to_lower(stringr::str_trim(x))  # use pkg:: prefix
# }

Oversigt over arbejdsgangen ved pakkeudvikling

Den almindelige iterative cyklus for udvikling af R-pakker:

  1. create_package() — opret strukturen én gang
  2. use_r('name') — opret en kildefil
  3. Skriv og dokumentér funktioner (roxygen2)
  4. load_all() — indlæs pakken i sessionen til interaktiv test
  5. document() — generér man/ og NAMESPACE igen
  6. test() — kør enhedstest
  7. check() — komplet R CMD check

Hurtigt tjek: DESCRIPTION-felter

Hvilket DESCRIPTION-felt angiver de R-pakker, som din pakke kalder direkte (hårde afhængigheder)?

Opsummering af pakkestrukturen

Vigtige filer og kommandoer ved udvikling af R-pakker:

  • usethis::create_package() — opret struktur med DESCRIPTION, NAMESPACE, R/
  • DESCRIPTION — metadata for Title, Version, Imports og License
  • usethis::use_r('name') — tilføj en kildefil til R/
  • devtools::load_all() — hurtig iterativ genindlæsning (Ctrl+Shift+L)
  • devtools::document() — generér man/ igen ud fra roxygen2
  • devtools::check() — komplet R CMD check med målet 0 fejl/advarsler
  • Placér aldrig library() i pakkens kildekode — brug pkg::fn()
Gratis at komme i gang

Lær R med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
43
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Pakkestruktur med usethis og devtools” gratis?

Ja — alle 3 lektioner i læringssporet R Academy, inklusive “Pakkestruktur med usethis og devtools”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. R Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Pakkestruktur med usethis og devtools”?

Opret en pakkemappe, DESCRIPTION og NAMESPACE med hjælp fra usethis. Du øver dig i R Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på R Academy?

Der kræves ingen tidligere erfaring. R Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Pakkestruktur med usethis og devtools”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne R Academy-lektion?

Ja. Alle R Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Pakkestruktur med usethis og devtools
  2. Dokumentation af funktioner med roxygen2
  3. Enhedstest med testthat
  4. CRAN-indsendelse og vedligeholdelse af pakker
← Tilbage til R Academy