Scripts laden met source()
Voer externe R-scripts uit en deel code tussen bestanden met source().
Scripts laden met source() is een gratis R Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.
Waarom source() gebruiken?
Naarmate je R-projecten groeien, wordt het onwerkbaar om alle code in één bestand te bewaren. Met de functie source() kun je een extern R-scriptbestand laden en uitvoeren, zodat je je werk opsplitst in logische, herbruikbare modules.
Dit vormt de basis van gestructureerde R-ontwikkeling.
# Imagine helpers.R contains:
# add <- function(a, b) a + b
# multiply <- function(a, b) a * b
# Load it into your main script:
source('helpers.R')
# Now use the functions defined there:
result <- add(3, 5)
cat('Result:', result)Basissyntaxis van source()
De eenvoudigste vorm van source() gebruikt een bestandspad als enige argument. Het bestand wordt gelezen en elke expressie erin wordt geëvalueerd in de huidige omgeving, precies alsof je de code rechtstreeks had getypt.
# source() with a relative path (file in working directory)
source('my_functions.R')
# source() with an absolute path
source('/Users/alice/projects/utils.R')
# After sourcing, all objects and functions defined
# in the file are available in your current session
cat('Script loaded successfully')De parameter echo
De parameter echo bepaalt of elke expressie uit het ingelezen bestand tijdens de uitvoering naar de console wordt afgedrukt. Standaard is echo = FALSE, zodat je console overzichtelijk blijft. TRUE instellen is nuttig voor foutopsporing.
# Default: silent loading (echo = FALSE)
source('helpers.R')
# Verbose: print each expression as it runs
source('helpers.R', echo = TRUE)
# echo = TRUE output looks like:
# > add <- function(a, b) a + b
# > multiply <- function(a, b) a * b
cat('Done')print.eval en verbose
Twee andere parameters geven je meer controle over de uitvoer. print.eval bepaalt of de resultaten van expressies worden afgedrukt, vergelijkbaar met de interactieve modus. verbose drukt extra informatie af over het inleesproces zelf.
# print.eval: print the VALUE of each expression
source('helpers.R', echo = TRUE, print.eval = TRUE)
# verbose: extra details like file name and line numbers
source('helpers.R', verbose = TRUE)
# Typical use: debugging a complex script
# source('complex_analysis.R', echo = TRUE, print.eval = TRUE)
cat('Parameters explored')De parameter local — geïsoleerde scope
Standaard voert source() code uit in de globale omgeving, waardoor alle gemaakte objecten in je werkruimte verschijnen. Met local = TRUE wordt het script uitgevoerd in een nieuwe, geïsoleerde omgeving, zodat je globale werkruimte schoon blijft.
# Without local: objects pollute global env
source('data_prep.R') # x, y, temp_df all appear in ls()
# With local = TRUE: objects stay inside
source('data_prep.R', local = TRUE)
# x, y, temp_df are NOT in your global workspace
# Verify nothing leaked:
cat('Objects in workspace:', length(ls()))
# local can also be an environment object:
my_env <- new.env()
source('data_prep.R', local = my_env)sys.source() voor veiliger laden
sys.source() is een alternatief op lager niveau dat een deel van de overhead van source() overslaat. Het verandert de werkmap niet en evalueert opties voor keepSource niet. Het wordt vaak gebruikt bij pakketontwikkeling en voor interne hulpmiddelen.
# sys.source() loads a file into a specific environment
utils_env <- new.env()
sys.source('utils.R', envir = utils_env)
# Access functions from that environment explicitly
result <- utils_env$my_helper(10)
cat('Result:', result)
# sys.source does not echo or verbose options
# It is faster and more predictable for package internals
cat('sys.source demo complete')Relatieve versus absolute paden
Het gebruik van relatieve paden in source() maakt je project draagbaar — het bestandspad wordt geïnterpreteerd ten opzichte van de huidige werkmap. Absolute paden werken overal, maar raken ongeldig wanneer je het project verplaatst. Geef in projectgerichte werkprocessen de voorkeur aan relatieve paden.
# Relative path — resolved from getwd()
source('R/helpers.R') # good for projects
source('scripts/utils.R') # subfolder
source('../shared/common.R') # parent folder
# Absolute path — fragile, machine-specific
source('/Users/alice/project/R/helpers.R')
# Check current working directory first:
cat('Working dir:', getwd())
# Best practice: use file.path() for clarity
source(file.path('R', 'helpers.R'))Meerdere bestanden inlezen
Je kunt source() meerdere keren aanroepen om verschillende hulpbestanden te laden. Een veelgebruikt patroon is één setup.R of _targets.R als toegangspunt, dat alle benodigde modules in de juiste volgorde inleest.
# main.R — entry point that loads all modules
source('R/data_loading.R')
source('R/cleaning.R')
source('R/analysis.R')
source('R/plotting.R')
# Or source all .R files in a directory:
r_files <- list.files('R', pattern = '\\.R$', full.names = TRUE)
for (f in r_files) {
source(f)
cat('Loaded:', f, '\n')
}
cat('All modules loaded')source() met chdir
De parameter chdir verandert tijdens de uitvoering tijdelijk de werkmap in de map met het ingelezen bestand. Dit is nuttig wanneer een hulpscript intern eigen relatieve paden gebruikt.
# Suppose scripts/analysis.R uses source('helpers.R')
# and helpers.R is also in scripts/
# Without chdir: R looks for helpers.R in YOUR working dir
source('scripts/analysis.R') # may fail
# With chdir = TRUE: working dir shifts to scripts/ temporarily
source('scripts/analysis.R', chdir = TRUE) # helpers.R found!
# After source() returns, working dir goes back to original
cat('Working dir restored:', getwd())Inlezen bij het opstarten via .Rprofile
Het bestand .Rprofile in je persoonlijke map of de projecthoofdmap wordt automatisch uitgevoerd telkens wanneer R start. Je kunt er source() in gebruiken om bij elke startsessie automatisch hulpprogramma's te laden, opties in te stellen of pakketten te koppelen.
# .Rprofile (in ~ or project root):
# source('~/.R/my_utils.R') # load personal helpers
# options(scipen = 999) # no scientific notation
# To open and edit .Rprofile:
file.edit('~/.Rprofile')
# To see where .Rprofile files are looked for:
cat(Sys.getenv('R_PROFILE_USER'))
# Caution: heavy .Rprofile slows R startup
# Keep it minimal — load only what you always need
cat('.Rprofile concept shown')source() in de praktijk — projectpatroon
Een overzichtelijk patroon uit de praktijk is je project organiseren met een map R/ voor alle hulpscripts en één bestand run.R of main.R dat deze inleest. Zo wordt het project eenvoudig te reproduceren en te delen.
# Project structure:
# my_project/
# run.R <- entry point
# R/
# 01_load.R <- data loading
# 02_clean.R <- data cleaning
# 03_model.R <- modeling
# 04_report.R <- output
# run.R content:
cat('=== Starting analysis ===\n')
source('R/01_load.R')
source('R/02_clean.R')
source('R/03_model.R')
source('R/04_report.R')
cat('=== Analysis complete ===\n')Korte controle
Welke parameter van source() voorkomt dat objecten die in het ingelezen bestand worden gemaakt, in de globale omgeving verschijnen?
source() — belangrijkste punten
source() is de ingebouwde manier van R om code te modulariseren:
source('file.R')— een script laden en uitvoeren in de globale omgevingecho = TRUE— elke expressie afdrukken, ideaal voor foutopsporinglocal = TRUE— geïsoleerd uitvoeren, zonder bijwerkingen in de globale omgevingchdir = TRUE— de werkmap tijdelijk wijzigen in de locatie van het bestandsys.source()— alternatief op laag niveau dat in pakketten wordt gebruikt- Geef voor draagbaarheid de voorkeur aan relatieve paden en projectgerichte werkprocessen
- Gebruik
.Rprofileom hulpscripts automatisch in te lezen wanneer R start
# Quick reference
source('R/helpers.R') # basic load
source('R/helpers.R', echo = TRUE) # verbose
source('R/helpers.R', local = TRUE) # isolated
source('scripts/run.R', chdir = TRUE) # local paths
env <- new.env()
sys.source('R/helpers.R', envir = env) # low-level
cat('source() mastered!')Leer R met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 43
- Lessen
- 159
Veelgestelde vragen
Is de les “Scripts laden met source()” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Scripts laden met source()”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.
Wat leer ik in “Scripts laden met source()”?
Voer externe R-scripts uit en deel code tussen bestanden met source(). Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met R Academy te beginnen?
Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Scripts laden met source()”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over R Academy?
Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Scripts laden met source()
- Opmerkingen, stijl en leesbaarheid
- Werkmappen en bestandspaden
- R-projecten en werkruimtebeheer