R'de Hatalar, Uyarılar ve İletiler
Üç sinyal türünü ve her birinin ne zaman oluşturulduğunu anlayın.
R'de Hatalar, Uyarılar ve İletiler, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
R Koşul Sistemi
R, sorunları iletmek için biçimsel bir koşul sistemi içerir. Üç temel koşul sınıfı vardır: hatalar (ölümcül — yürütmeyi durdurur), uyarılar (ölümcül olmayan — kod tamamlandıktan sonra yazdırılır) ve iletiler (bilgilendirici — stderr akışına gider).
# 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() — Hata Oluşturma
stop(msg) bir hata koşulunu bildirir. Yürütme hemen durur ve hata iletisi görüntülenir. Girdiler geçersiz olduğunda veya kurtarılamaz bir durum algılandığında yürütmeyi iptal etmek için işlevlerin içinde kullanılır.
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() — Ölümcül Olmayan Uyarılar
warning(msg) bir uyarı koşulunu bildirir. Hatalardan farklı olarak uyarılar yürütmeyi durdurmaz; işlev çalışmaya devam eder ve uyarı toplanır. Varsayılan olarak uyarılar tüm kod tamamlandıktan sonra yazdırılır; options(warn=1) ayarlanmışsa hemen yazdırılır.
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() — Bilgilendirici Koşullar
message(msg) bir ileti koşulunu bildirir. stderr akışına gider, otomatik satır sonu içerir ve suppressMessages() ile bastırılabilir. İşlevlerde ilerleme güncellemeleri için kullanın; hata veya uyarı için kullanmayın.
load_data <- function(n) {
message('Loading ', n, ' records...')
seq_len(n)
}
data <- suppressMessages(load_data(100))
cat('Got', length(data), 'records\n')simpleError ve simpleWarning Nesneleri
R bir koşul oluşturduğunda iletiyi bir koşul nesnesi içine sarar. simpleError('msg') ve simpleWarning('msg'), koşul nesnelerini elle oluşturur. Bunları conditionMessage() ile inceleyebilirsiniz.
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() ve conditionCall()
conditionMessage(cond), herhangi bir koşul nesnesindeki metin iletisini çıkarır. conditionCall(cond), koşulu tetikleyen çağrıyı çıkarır. Her ikisi de hata işleyicilerinin içinde günlükleme yapmak veya koşulları yeniden bildirmek için kullanışlıdır.
tryCatch(
log(-1),
warning = function(w) {
cat('Caught warning :', conditionMessage(w), '\n')
cat('From call :', deparse(conditionCall(w)), '\n')
}
)options(warn = 2) — Uyarıları Hatalar Olarak Ele Alma
options(warn = 2) ayarı tüm uyarıları hatalara dönüştürerek yürütmenin hemen durmasına neden olur. Bu, uyarı oluşturan kodu geliştirme sırasında erkenden yakalamak için kullanışlıdır. options(warn = 0) ile eski duruma dönebilirsiniz.
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))Anında ve Ertelenmiş Uyarılar
options(warn = 0) (varsayılan) ile uyarılar toplanır ve sonunda yazdırılır. options(warn = 1) ile her uyarı oluştuğu anda yazdırılır. warn = 2 ile uyarılar hatalara dönüşür.
# 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)Hata ve Uyarı: Ölümcül ve Ölümcül Olmayan
Kritik ayrım şudur: bir hata, bir işleyici tarafından yakalanmadığı sürece yürütmeyi tamamen durdurur. Bir uyarı kaydedilir, ancak yürütme devam eder. Bu nedenle hata kullanmanız gereken yerde uyarı kullanırsanız, hatalı girdiler sessizce yanlış sonuçlar üretebilir.
# 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'))Koşulları İç İçe Yerleştirme
Koşullar, diğer koşul işleyicilerinin içinde oluşturulabilir. Bir uyarı işleyicisi, uyarıyı hataya dönüştürmek için stop() çağırabilir. Bu, üçüncü taraf kodunu daha sıkı hâle getirmek için yaygın bir kalıptır.
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() ve suppressMessages()
suppressWarnings(expr), ifadeyi değerlendirirken tüm uyarıları sessizce yakalar ve yok sayar. suppressMessages(expr) de aynısını ileti koşulları için yapar. Bunları ölçülü kullanın; uyarıları bastırmak gerçek sorunları gizleyebilir.
# 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')Kısa Kontrol
warning() ile stop() arasındaki farkla ilgili aşağıdaki ifadelerden hangisi doğrudur?
Koşullar: Temel Noktalar
R koşullarıyla ilgili temel noktalar:
stop()= hata = ölümcül, hemen durur;warning()= ölümcül olmayan, yürütme devam eder;message()= bilgilendirici, stderr akışına gider- Üçü de sınıf hiyerarşisine sahip koşul nesneleri oluşturur
conditionMessage(e), herhangi bir koşuldaki metni çıkarıroptions(warn=1)uyarıları hemen yazdırır;warn=2uyarıları hata olarak ele alırsuppressWarnings()/suppressMessages()koşulları susturur- Devam edilmesi yanlış sonuç verecek geçersiz girdiler için
stop()kullanmayı tercih edin
# 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'))Sıkça Sorulan Sorular
“R'de Hatalar, Uyarılar ve İletiler” dersi ücretsiz mi?
Evet — “R'de Hatalar, Uyarılar ve İletiler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“R'de Hatalar, Uyarılar ve İletiler” dersinde ne öğreneceğim?
Üç sinyal türünü ve her birinin ne zaman oluşturulduğunu anlayın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“R'de Hatalar, Uyarılar ve İletiler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- R'de Hatalar, Uyarılar ve İletiler
- Hata Kurtarma için tryCatch()
- withCallingHandlers() ve Yeniden Başlatmalar
- stop() ve warning() ile Sağlam İşlevler Yazma