Fouten, waarschuwingen en berichten in R
Begrijp de drie signaaltypen en wanneer elk ervan wordt gegenereerd.
Fouten, waarschuwingen en berichten in R 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.
Het conditiesysteem van R
R heeft een formeel conditiesysteem om problemen te melden. Er zijn drie hoofdklassen van condities: fouten (fataal — stoppen de uitvoering), waarschuwingen (niet-fataal — worden afgedrukt nadat de code is voltooid) en berichten (informatief — gaan naar stderr).
# Each condition type behaves differently
message('This is a message')
warning('This is a warning')
# stop() would halt here, so wrap it
tryCatch(stop('This is an error'), error = function(e) print(e))stop() — Fouten genereren
stop(msg) signaleert een foutconditie. De uitvoering stopt onmiddellijk en het foutbericht wordt weergegeven. Gebruik de functie in functies om af te breken wanneer invoer ongeldig is of een onherstelbare situatie wordt vastgesteld.
divide <- function(x, y) {
if (y == 0) stop('Division by zero is not allowed')
x / y
}
tryCatch(divide(10, 0), error = function(e) cat('Error:', conditionMessage(e), '\n'))
divide(10, 2)warning() — Niet-fatale waarschuwingen
warning(msg) signaleert een waarschuwingsconditie. In tegenstelling tot fouten stoppen waarschuwingen de uitvoering niet: de functie gaat door en de waarschuwing wordt verzameld. Standaard worden waarschuwingen afgedrukt nadat alle code is voltooid, of onmiddellijk als options(warn=1) is ingesteld.
safe_sqrt <- function(x) {
if (x < 0) {
warning('Negative input; returning NaN')
return(NaN)
}
sqrt(x)
}
result <- safe_sqrt(-4)
cat('Result:', result, '\n')message() — Informatieve condities
message(msg) signaleert een berichtconditie. Het bericht gaat naar stderr, bevat automatisch een nieuwe regel en kan worden onderdrukt met suppressMessages(). Gebruik deze functie voor voortgangsupdates in functies, niet voor fouten of waarschuwingen.
load_data <- function(n) {
message('Loading ', n, ' records...')
seq_len(n)
}
data <- suppressMessages(load_data(100))
cat('Got', length(data), 'records\n')simpleError- en simpleWarning-objecten
Wanneer R een conditie maakt, verpakt het bericht die in een conditieobject. Met simpleError('msg') en simpleWarning('msg') maak je handmatig conditieobjecten. Je kunt ze inspecteren met conditionMessage().
e <- simpleError('something went wrong')
w <- simpleWarning('this looks suspicious')
cat('Error class :', class(e), '\n')
cat('Warning class :', class(w), '\n')
cat('Error message :', conditionMessage(e), '\n')
cat('Warning msg :', conditionMessage(w), '\n')conditionMessage() en conditionCall()
conditionMessage(cond) haalt het tekstbericht uit elk conditieobject. conditionCall(cond) haalt de aanroep op die de conditie heeft veroorzaakt. Beide zijn nuttig in foutafhandelaars voor logboekregistratie of het opnieuw signaleren van condities.
tryCatch(
log(-1),
warning = function(w) {
cat('Caught warning :', conditionMessage(w), '\n')
cat('From call :', deparse(conditionCall(w)), '\n')
}
)options(warn = 2) — Waarschuwingen als fouten behandelen
Met options(warn = 2) worden alle waarschuwingen omgezet in fouten, waardoor de uitvoering onmiddellijk stopt. Dit is nuttig tijdens de ontwikkeling om code die waarschuwingen genereert vroeg te vinden. Zet de optie terug met options(warn = 0).
old_warn <- options(warn = 0) # default: collect warnings
log(-1) # just a warning
options(warn = 0)
tryCatch({
options(warn = 2)
log(-1) # now fatal
}, error = function(e) cat('Caught as error:', conditionMessage(e), '\n'),
finally = options(old_warn))Onmiddellijke versus uitgestelde waarschuwingen
Met options(warn = 0) (de standaardwaarde) worden waarschuwingen verzameld en aan het einde afgedrukt. Met options(warn = 1) wordt elke waarschuwing onmiddellijk afgedrukt zodra die optreedt. Met warn = 2 worden ze fouten.
# warn=1: print warnings immediately as they happen
old <- options(warn = 1)
result1 <- log(-1)
result2 <- sqrt(-4)
cat('Results:', result1, result2, '\n')
options(old)Fout versus waarschuwing: fataal versus niet-fataal
Het cruciale verschil: een fout stopt de uitvoering volledig, tenzij een afhandelaar de fout onderschept. Een waarschuwing wordt vastgelegd, maar de uitvoering gaat door. Daardoor kan ongeldige invoer stilzwijgend onjuiste resultaten opleveren als je waarschuwingen gebruikt waar je fouten zou moeten gebruiken.
# With warning: execution continues
f_warn <- function(x) { if (x < 0) warning('negative'); x^2 }
cat('warn result:', f_warn(-3), '\n') # still computes 9
# With error: execution stops
f_stop <- function(x) { if (x < 0) stop('negative'); x^2 }
tryCatch(f_stop(-3), error = function(e) cat('stopped:', e$message, '\n'))Condities nesten
Condities kunnen binnen andere conditieafhandelaars worden gegenereerd. Een waarschuwingsafhandelaar kan stop() aanroepen om een waarschuwing naar een fout te promoveren. Dit is een veelgebruikt patroon om code van derden strenger te maken.
strict_log <- function(x) {
withCallingHandlers(
log(x),
warning = function(w) {
stop(paste('Strict mode: warning treated as error:', conditionMessage(w)))
}
)
}
tryCatch(strict_log(-1), error = function(e) cat('Error:', e$message, '\n'))
cat('log(4) =', strict_log(4), '\n')suppressWarnings() en suppressMessages()
suppressWarnings(expr) evalueert de expressie en vangt alle waarschuwingen stil op om ze vervolgens te negeren. suppressMessages(expr) doet hetzelfde voor berichtcondities. Gebruik deze functies met mate: door waarschuwingen te onderdrukken kunnen echte problemen verborgen blijven.
# Without suppression: warning shown
result1 <- log(-1)
# With suppression: warning hidden
result2 <- suppressWarnings(log(-1))
cat('Both are NaN:', is.nan(result1), is.nan(result2), '\n')Korte controle
Welke van de volgende uitspraken over warning() versus stop() is juist?
Condities: belangrijkste punten
Belangrijkste punten voor R-condities:
stop()= fout = fataal, stopt onmiddellijk;warning()= niet-fataal, de uitvoering gaat door;message()= informatief, gaat naar stderr- Alle drie maken conditieobjecten met een klassenhiërarchie
conditionMessage(e)haalt de tekst uit elke conditieoptions(warn=1)drukt waarschuwingen onmiddellijk af;warn=2behandelt ze als foutensuppressWarnings()/suppressMessages()onderdrukken condities- Gebruik bij ongeldige invoer bij voorkeur
stop()wanneer doorgaan onjuist zou zijn
# Summary of the three condition functions
tryCatch({
message('Step 1 starting')
warning('something looks odd')
stop('cannot continue')
}, message = function(m) cat('MSG:', conditionMessage(m)),
warning = function(w) cat('WARN:', conditionMessage(w), '\n'),
error = function(e) cat('ERR:', conditionMessage(e), '\n'))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 “Fouten, waarschuwingen en berichten in R” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Fouten, waarschuwingen en berichten in R”, 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 “Fouten, waarschuwingen en berichten in R”?
Begrijp de drie signaaltypen en wanneer elk ervan wordt gegenereerd. 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 “Fouten, waarschuwingen en berichten in R”?
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
- Fouten, waarschuwingen en berichten in R
- tryCatch() voor foutafhandeling
- withCallingHandlers() en restarts
- Robuuste functies schrijven met stop() en warning()