Ana içeriğe atla
R

DataCamp'in Otomatik Notlandırıcısını Kullanarak R Öğretmek

DataCamp'in otomatik notlandırıcısının R öğretimine nasıl yardımcı olduğunu ve testwhat işlevlerini nasıl kullanıma alacağınızı öğrenin.
Filip Schouwenaars's photo
Filip Schouwenaars
Güncel · 6 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Ücretsiz Hesabınızı Oluşturun

Alıştırma and program your progress.

Google Ile Devam Edin
Devam ederek Kullanım Şartlarımızı, Gizlilik Politikamızı ve verilerinizin ABD’de saklandığını kabul etmiş olursunuz.

İlk kurslarımızı yayınladığımızdan beri, anında ve kişiselleştirilmiş geri bildirim DataCamp’teki öğrenme deneyiminin merkezinde yer alıyor. Öğrenciler hatalı kod gönderdiğinde, hatayı nerede yaptıkları ve bunu nasıl düzeltebilecekleri kendilerine bildirilir. Bunu ücretsiz Introduction to R kursumuzda deneyebilirsiniz. Aşağıdaki ekran görüntüsü Intermediate R kursumuzdandır.

Gönderimleri kontrol etmek ve geri bildirim üretmek için DataCamp’teki her alıştırmada, Submission Correctness Test (Gönderim Doğruluğu Testi) ya da kısaca SCT bulunur.

SCT, öğrencilerin gönderdiği kodu ve bu kodla ürettikleri çıktı ile değişkenleri değerlendiren özel testlerden oluşan bir betiktir. DataCamp’te öğrettiğimiz her dil için, bir öğrenci gönderiminin tüm bu unsurlarını kolayca doğrulayacak karşılık gelen bir açık kaynak paket oluşturduk. R alıştırmaları için bu paket testwhat olarak adlandırılır. Yıllar içinde şunlar için pek çok işlev ekledik:

  • değişken atamasını kontrol etme
  • fonksiyon çağrılarını ve fonksiyon çağrılarının sonuçlarını kontrol etme
  • if ifadelerini, for döngülerini ve while döngülerini kontrol etme
  • fonksiyon tanımını kontrol etme
  • uygun paketlerin yüklenip yüklenmediğini kontrol etme
  • öğrencinin ürettiği çıktıyı kontrol etme
  • ggplot ve ggvis çizim çağrılarını kontrol etme
  • ...

Bu kontrol işlevleri bir hata tespit ettiğinde, öğrencileri hatalarına yönlendiren anlamlı bir geri bildirim mesajı otomatik olarak oluşturur. Ayrıca, bu otomatik oluşturulan mesajların yerine geçecek özel geri bildirim mesajları da belirtebilirsiniz.

Tarihsel olarak, testwhat DataCamp’in sunucularında R kodu çalıştıran tescilli arka ucumuzla yakından bağlantılıydı. testwhat her zaman açık kaynak olmasına rağmen, bu özel arka uç olmadan iyi çalışmazdı ve yalnızca DataCamp bağlamında kullanılabilirdi. Bugün ise testwhat bağımsız olarak kullanılabilir ve başka kullanım senaryolarını da destekler. Öğretim biçiminiz DataCamp’inkinden çok farklı olsa bile, testwhat’ın sunduğu her şeyi öğrenci gönderimlerini test etmek için kullanabilirsiniz. Paketi GitHub’dan kurabilirsiniz:

library(remotes) # devtools works fine too
install_github('datacamp/testwhat')

Hızlı bir demo olarak, öğrencilerden x değişkenini 5’e eşitlemelerini istediğinizi varsayalım. İdeal çözümün karakter dizisi hali şöyle olabilir:

solution_code <- 'x <- 5'

Şimdi, öğrencinin x’i yanlışlıkla iki değerli bir vektör olarak ayarladığı bir betik gönderdiğini varsayalım; bu da şu şekilde kodlanabilir:

student_code <- 'x <- c(4, 5)'

testwhat, bir öğrenci gönderimini ve bir çözüm betiğini ayrı ortamlarda çalıştıran ve öğrenci kodunun ürettiği çıktı ile hataları yakalayan setup_state() adlı bir işlev içerir. Tüm bu bilgiler, ex() ile erişebileceğiniz alıştırma durumunda saklanır:

library(testwhat)
setup_state(stu_code = student_code,
            sol_code = solution_code)
ex()
## <RootState>

Bu alıştırma durumu, testwhat’ın sunduğu geniş yelpazedeki kontrol işlevlerine magrittr’ın borulama (piping) sözdizimiyle aktarılabilir. Öğrencinin bir x değişkeni tanımlayıp tanımlamadığını kontrol etmek için check_object()’ı kullanabilirsiniz:

ex() %>% check_object('x')
## <ObjectState>

Bu kod sorunsuz çalışır, çünkü öğrenci gerçekten bir x değişkeni tanımlamıştır. Devam edip öğrencinin x değişkenini doğru tanımlayıp tanımlamadığını kontrol etmek için check_equal()’ı kullanabilirsiniz:

ex() %>% check_object('x') %>% check_equal()
## Error in check_that(is_equal(student_obj, solution_obj, eq_condition), : The contents of the variable `x` aren't correct. It has length 2, while it should have length 1.

Bu bir hatayla sonuçlanır. check_equal(), öğrenci ortamındaki x değerinin (bir vektör) çözüm ortamındaki x değerine (tek bir sayı) uymadığını tespit eder. Hata mesajının bu hatayı açıklayan okunabilir bir iletiden oluştuğuna dikkat edin.

Yukarıdaki örnek etkileşimliydi: bir durum oluşturdunuz ve ardından kontrol işlev zincirlerini yazmaya devam ettiniz. Daha üst düzeyde, kontrol kodunu sarmalamak için run_until_fail()’ı kullanabilirsiniz. Bu, testler dizinizi başarısız olana kadar çalıştırır:

library(testwhat)
setup_state(stu_code = 'x <- 4',
            sol_code = 'x <- 5')
res <- run_until_fail({
  ex() %>% check_object('x') %>% check_equal()
})
res$correct
## [1] FALSE
res$message
## [1] "The contents of the variable `x` aren't correct."

Öğrenci gönderimi ve çözümle bir alıştırma durumu oluşturma ve ardından run_until_fail() kullanarak bir dizi testi yürütme yaklaşımı, ihtiyaçlarınıza uygun bir otomatik notlandırma iş akışına kolayca gömülebilir. Diyelim ki öğrenciler ödevlerini, bilgisayarınıza submissions klasörüne indirdiğiniz bir R betiği biçiminde teslim etti (klasörü bazı rastgele verilerle önceden doldurduk). submissions klasöründe bir dizi R betiği var. Her R betiği bir öğrenci gönderimi içeriyor:

dir('submissions')
##  [1] "student_a.R" "student_b.R" "student_c.R" "student_d.R" "student_e.R"
##  [6] "student_f.R" "student_g.R" "student_h.R" "student_i.R" "student_j.R"
readLines('submissions/student_a.R')
## [1] "x <- 4"
readLines('submissions/student_b.R')
## [1] "x <- 5"

Şimdi tüm bu gönderimler arasında dolaşabilir ve öğrenci bazında gönderimin doğru olup olmadığını belirten bir data.frame oluşturabiliriz:

library(testwhat)

folder_name <- 'submissions'
all_files <- file.path(folder_name, dir(folder_name))
student_results <- sapply(all_files, function(file) {
  student_code <- readLines(file)
  setup_state(sol_code = 'x <- 5',
              stu_code = student_code)
  res <- run_until_fail({
    ex() %>% check_object('x') %>% check_equal()
  })
  res$correct
})
results_df <- data.frame(name = all_files, correct = student_results,
                         row.names = NULL, stringsAsFactors = FALSE)
results_df
##                       name correct
## 1  submissions/student_a.R   FALSE
## 2  submissions/student_b.R    TRUE
## 3  submissions/student_c.R    TRUE
## 4  submissions/student_d.R    TRUE
## 5  submissions/student_e.R   FALSE
## 6  submissions/student_f.R    TRUE
## 7  submissions/student_g.R   FALSE
## 8  submissions/student_h.R   FALSE
## 9  submissions/student_i.R    TRUE
## 10 submissions/student_j.R    TRUE

Bu küçük demo hâlâ biraz kaba olsa da ana fikri aktardığını umuyorum: setup_state() için uygun girdileri oluşturmak üzere biraz R düzenlemesiyle, testwhat’ın tüm kontrol işlevlerini işe koşabilirsiniz. run_until_fail() içinde belirttiğiniz testler hem öğrencilerin çalışmalarını doğrulayacak hem de yaptıkları hatalara işaret eden anlamlı geri bildirimler üretecektir.

testwhat hakkında daha fazla bilgi edinmek için GitHub deposunu veya pkgdown ile oluşturulmuş paket dokümantasyonunu ziyaret edebilirsiniz. Belirli kontrol işlevlerinin nasıl kullanılacağını anlatan hem vinyetler hem de belirtebileceğiniz tüm argümanları açıklayan başvuru fonksiyonu içerir. GitHub’da sorun bildirmekten ya da content-engineering@datacamp.com üzerinden bize ulaşmaktan çekinmeyin; geri bildirimi seviyoruz! Keyifli öğretimler!

Bu blog yazısı RMarkdown ile oluşturulmuştur. Kaynağına buradan ulaşabilirsiniz.

Konular
R
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını Gör