Last chance! 50% off DataCamp Premium
Sale ends in
Bir R mülakatında başarılı olma şansınızı artırmak için, iş arıyorsanız size sorulabilecek olası soruları ya da işe alım sorumlusu veya işe alım uzmanıysanız bir adaya sorabileceğiniz soruları önceden bilmek her zaman faydalıdır.
Bu makalede, tüm kıdem seviyeleri için 40 temel R programlama mülakat sorusu ve cevapları ile bazı genel mülakat soruları ele alınmaktadır. Kolaylık olması için tüm teknik sorular üç seviyeye ayrılmıştır: başlangıç, orta ve ileri seviye sorular.
R programlama mülakat hazırlığınız için ek kaynaklar olarak aşağıdaki yararlı blog ve kursları göz önünde bulundurun:
Bir R mülakatının başında, görüşmeyi yapan kişi adayın R ile genel deneyimine ilişkin bazı teknik olmayan, genel sorular sorabilir. Örneğin:
Eğer iş arıyorsanız, bu ve benzeri sorular hakkında önceden düşünmeli ve cevaplarınızı hazırlamalısınız. Henüz R ile gerçek bir iş deneyiminiz yoksa endişelenmeyin: R programlamadaki stajınızı veya öğreniminiz sırasında tamamladığınız bireysel ya da grup R projelerini anlatmanız gayet yeterlidir.
Ayrıca, başlangıç seviyesindeki bir pozisyon için mülakata giriyorsanız, görüşmeyi yapan kişi sizden mutlaka kapsamlı (hatta herhangi bir) R iş deneyimi beklemeyebilir. Unutmayın ki bu mülakata davet edildiğinize göre, şirket özgeçmişinizi zaten ilgi çekici bulmuştur.
Potansiyel işvereninizden karşılaşabileceğiniz bazı temel teknik R mülakat sorularıyla başlayalım. Bunlar, temelleri öğrenmiş olmanızı ve R’yi pratikte kullanma deneyimine sahip olmanızı gerektirir.
R, veri bilimi problemlerini çözmek için yaygın olarak kullanılan, özellikle istatistiksel hesaplama ve veri görselleştirme için tasarlanmış bir programlama dili ve ortamıdır. Temel özellikleri şunlardır:
R’de birkaç veri tipi vardır, bunlar şunlardır:
TRUE ve FALSE Boolean değerleri; perde arkasında sırasıyla 1 ve 0 olarak temsil edilir.Temel R, veri içe aktarmak için gerekli işlevleri sağlar:
read.table()—temel R’de veri içe aktarmak için en genel işlevidir, alan ayraçları herhangi bir türde olan (ör. | gibi belirli ayraçlar dahil) tablo verilerini alır.
read.csv()—ondalık ayırıcı olarak . kullanan virgülle ayrılmış değer (CSV) dosyaları.
read.csv2()—ondalık ayırıcı olarak , kullanan noktalı virgülle ayrılmış değer dosyaları.
read.delim()—ondalık ayırıcı olarak . kullanan sekmeyle ayrılmış değer (TSV) dosyaları.
read.delim2()—ondalık ayırıcı olarak , kullanan sekmeyle ayrılmış değer (TSV) dosyaları.
Uygulamada, bu işlevlerin her biri, alan ve ondalık ayraçları ne olursa olsun tablo verilerini içe aktarmak için kullanılabilir: belirtilen dosya formatları için kullanımları yalnızca bir gelenek ve varsayılan ayarlar meselesidir. Örneğin, ilk işlevin sözdizimi şöyledir: read.table(file, header = FALSE, sep = "", dec = "."). Diğer işlevler aynı parametrelere sahiptir, ancak varsayılan ayarları farklıdır ve bunlar her zaman açıkça geçersiz kılınabilir.
tidyverse paketlerindeki readr ve readxl, belirli dosya formatlarını içe aktarmak için başka işlevler sunar. Bu işlevlerin her biri, çeşitli isteğe bağlı parametreler ayarlanarak daha da ince ayar yapılabilir.
read_tsv()—sekmeyle ayrılmış değer (TSV) dosyaları.
read_fwf()—sabit genişlikli dosyalar.
read_log()—web günlük dosyaları.
read_table(), read_csv(), read_csv2() ve read_delim()—temel R işlevlerinin karşılıkları.
read_excel()—Excel dosyaları.
read_csv()—temel R’deki işleve eşdeğer.
R’de veri yüklemeye daha derin dalmak için Veriler R’ye Nasıl İçe Aktarılır eğitimine göz atabilirsiniz.
Bir R paketi, belirli türde görevleri çözmek üzere tasarlanmış, R programlama dilinin bir uzantısını temsil eden fonksiyonlar, kod, veri ve dokümantasyondan oluşan bir koleksiyondur. R, önceden kurulmuş bir dizi paketle gelir ve diğer paketler kullanıcılar tarafından depolardan kurulabilir. Binlerce farklı R paketini barındıran en popüler merkezi depo, Comprehensive R Archive Network (CRAN) olarak adlandırılır.
Bir R paketini doğrudan CRAN’dan kurmak için paket adını tırnak içinde install.packages() işlevine iletmemiz gerekir: install.packages("package_name"). Birden fazla paketi tek seferde CRAN’dan kurmak için paket adlarını tırnak içinde içeren bir karakter vektörü kullanırız: install.packages(c("package_name_1", "package_name_2"). Bir R paketini elle kurmak için önce paketi bilgisayarımıza zip dosyası olarak indirmemiz ve ardından install.packages() function çalıştırmamız gerekir:
install.packages("path_to_the_locally_stored_zipped_package_file", repos=NULL, type="source")
Kurulu bir R paketini çalışma R ortamına yüklemek için library() veya require() işlevlerinden birini kullanabiliriz. Her ikisi de paket adını tırnaksız alır ve paketi yükler, örn. library(caret). Ancak gerekli paketi bulamadıklarında davranışları farklıdır: library() bir hata fırlatır ve programın yürütülmesini durdurur, require() ise bir uyarı verir ve programın yürütülmesine devam eder.
1. Aynı uzunlukta bir veya daha fazla vektörden—data.frame() işlevini kullanarak:
df <- data.frame(vector_1, vector_2)
2. Bir matristen—data.frame() işlevini kullanarak:
df <- data.frame(my_matrix)
3. Aynı uzunlukta bir vektör listesinden—data.frame() işlevini kullanarak:
df <- data.frame(list_of_vectors)
4. Diğer data framelerden:
Data frame’leri yatay birleştirmek için (yalnızca data frame’ler aynı sayıda satıra ve aynı sırada aynı kayıtlara sahipse) —cbind() işlevini kullanarak:
df <- cbind(df1, df2)
Data frame’leri dikey birleştirmek için (yalnızca aynı sırada görünen, aynı isimde ve aynı veri tipinde eşit sayıda sütuna sahiplerse) —rbind() işlevini kullanarak:
df <- rbind(df1, df2)
$ sembolünü kullanarak:df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
df$col_3 <- c(5, 1, 18, 16)
print(df)
Çıktı:
col_1 col_2
1 10 a
2 11 b
3 12 c
4 13 d
col_1 col_2 col_3
1 10 a 5
2 11 b 1
3 12 c 18
4 13 d 16
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
df["col_3"] <- c(5, 1, 18, 16)
print(df)
Çıktı:
col_1 col_2
1 10 a
2 11 b
3 12 c
4 13 d
col_1 col_2 col_3
1 10 a 5
2 11 b 1
3 12 c 18
4 13 d 16
cbind() işlevini kullanarak:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
df <- cbind(df, col_3=c(5, 1, 18, 16))
print(df)
Çıktı:
col_1 col_2
1 10 a
2 11 b
3 12 c
4 13 d
col_1 col_2 col_3
1 10 a 5
2 11 b 1
3 12 c 18
4 13 d 16
Her üç durumda da tek bir değer veya bir vektör atayabilir ya da yeni sütunu bu data frame’deki veya diğer data frame’lerdeki mevcut sütunlara dayanarak hesaplayabiliriz.
1. tidyverse koleksiyonunun dplyr paketindeki select() işlevini kullanarak. Silinecek her sütunun adı önüne eksi işareti konarak iletilir:
df <- select(df, -col_1, -col_3)
Bunun yerine, silinecek çok fazla sütunumuz varsa, ilgi duyduğumuz sütunları silmek yerine kalan sütunları tutmak daha mantıklıdır. Bu durumda sözdizimi benzerdir, ancak tutulacak sütun adlarının önüne eksi işareti gelmez:
df <- select(df, col_2, col_4)
2. Temel R’nin yerleşik subset() işlevini kullanarak. Yalnızca bir sütunu silmemiz gerekiyorsa, işlevin select parametresine, önüne eksi işareti getirilmiş sütun adını atarız. Birden fazla sütunu silmek için bu parametreye, gerekli sütun adlarını önlerine eksi işareti ile içeren bir vektör atarız:
df <- subset(df, select=-col_1)
df <- subset(df, select=-c(col_1, col_3))
Bunun yerine, silinecek çok fazla sütunumuz varsa, ilgi duyduğumuz sütunları silmek yerine kalan sütunları tutmak daha mantıklıdır. Bu durumda sözdizimi benzerdir, ancak eksi işareti eklenmez:
df <- subset(df, select=col_2)
df <- subset(df, select=c(col_2, col_4))
R’de factor, önceden tanımlı bir olası değer kümesinden (düzeyler olarak da bilinir) kategorileri kabul eden özel bir veri tipidir. Bu kategoriler karakter gibi görünse de perde arkasında tamsayı olarak saklanırlar. Çoğu zaman bu kategorilerin içsel bir sıralaması vardır. Örneğin, görüşlerin değerlendirilmesi için Likert ölçeği seçeneklerini ("kesinlikle katılıyorum", "katılıyorum", "biraz katılıyorum", "ne katılıyorum ne katılmıyorum", "biraz katılmıyorum", "katılmıyorum", "kesinlikle katılmıyorum") içeren bir data frame sütunu, bu içsel sıralamayı yakalamak ve kategorik grafik türlerinde bunu uygun şekilde yansıtmak için factor tipinde olmalıdır.
RStudio, 3.0.1 sürümünden itibaren R programlama diliyle çalışmak için grafiksel bir ön yüz olarak yaygın şekilde kullanılan açık kaynaklı bir IDE’dir (tümleşik geliştirme ortamı). R kullanıcıları arasında çok popüler olmasını sağlayan birçok yararlı özelliğe sahiptir:
RStudio’nun ne olduğunu, nasıl kurulacağını ve nasıl kullanılmaya başlanacağını öğrenmek için şu RStudio Eğitimini takip edebilirsiniz.
R Markdown, veri bilimi projeleri oluşturmaya yönelik bir yazım çerçevesi sağlayan, ücretsiz ve açık kaynaklı bir R paketidir. Bunu kullanarak anlatı metni, kod ve grafiklerin bir araya getirildiği tek bir .rmd dosyası yazabilir ve ardından bu dosyayı seçilen bir çıktı formatında oluşturabiliriz. R Markdown’ın temel özellikleri şunlardır:
R’de kullanıcı tanımlı bir fonksiyon oluşturmak için function anahtar sözcüğünü ve aşağıdaki sözdizimini kullanırız:
function_name <- function(parameters){
function body
}
return() deyimini (veya deyimlerini) ya da çıktıyı yazdırmak için print() deyimini (veya deyimlerini) içerir.R’de basit bir kullanıcı tanımlı fonksiyon örneği:
my_function <- function(x, y){
return(x + y)
}
Daha deneyimli uygulayıcılar için, görüşmeyi yapan kişinin R hakkında daha ayrıntılı bilgi gerektiren bazı sorular sorması muhtemeldir. Hazırlanmanız için bazıları şunlardır:
<- atama operatörünü kullanarak, örn. my_var <- 1—R’de bir değişkene değer atamanın en yaygın yolu.
= eşittir operatörünü kullanarak, örn. my_var = 1—bir fonksiyon tanımı içinde argümanlara değer atamak için.
-> sağa atama operatörünü kullanarak, örn. my_var -> 1—pipe’larda kullanılabilir.
Küresel atama operatörlerini kullanarak, sola (<<-) veya sağa (->>), örn. my_var <<- 1—bir fonksiyon tanımı içinde küresel bir değişken oluşturmak için.
Bir değişken adı; harfler, rakamlar, nokta ve alt çizginin bir kombinasyonu olabilir. Boşluklar dahil başka semboller içeremez.
Bir değişken adı bir harf veya nokta ile başlamalıdır.
Bir değişken adı nokta ile başlıyorsa, bu noktanın ardından bir rakam gelemez.
R’de ayrılmış sözcükler (TRUE, for, NULL, vb.) değişken adı olarak kullanılamaz.
Değişken adları büyük/küçük harfe duyarlıdır.
Verimli R Kodu Yazma kursunda, R’de kod yazmaya ilişkin daha fazla en iyi uygulamayı bulacaksınız.
1. For döngüsü—bir dizi üzerinde, uzunluğu kadar (aksi halde break ve/veya next deyimleri kullanılmadıkça) yinelenir ve dizinin her öğesi üzerinde aynı işlemleri yapar. En yaygın döngü türüdür. R’de for döngüsünün sözdizimi şöyledir:
for (variable in sequence) {
operations
}
2. While döngüsü—önceden tanımlı bir mantıksal koşul (veya birkaç koşul) sağlanana kadar aynı işlemleri yapar—break ve/veya next deyimleri kullanılmadıkça. For döngülerinden farklı olarak, bir while döngüsünün kaç yineleme yapacağını önceden bilmeyiz. While döngüsünü çalıştırmadan önce bir değişken (veya birkaç değişken) atar ve her yinelemede döngü gövdesi içinde değerini güncelleriz. R’de while döngüsünün sözdizimi şöyledir:
variable assignment
while (logical condition) {
operations
variable update
}
3. Repeat döngüsü—önceden tanımlanmış bir kırılma koşulu (veya birkaç koşul) sağlanana kadar aynı işlemleri tekrarlar. Böyle bir koşulu tanıtmak için, repeat döngüsü gövdesinde bir if deyimi bloğu bulunmalı ve bunun içinde break deyimi yer almalıdır. While döngülerine benzer şekilde, repeat döngüsünün kaç yineleme yapacağını önceden bilmeyiz. R’de repeat döngüsünün sözdizimi şöyledir:
repeat {
operations
if(break condition) {
break
}
}
Ayrı eğitimimizde R’de Döngüler hakkında daha fazla okuyabilirsiniz.
R’de veriyi özetlemek için aggregate() işlevini kullanırız. Bu işlevin şu temel parametreleri vardır ve bu sırayla verilir:
x—özetlenecek data frame.
by—gruplanacak faktörlerin bir listesi.
FUN—her grup için özet istatistikleri hesaplayacak bir toplama (aggregate) fonksiyonu (örn. mean, max, min, count, sum).
1. cbind() işlevini kullanarak—yalnızca data frame’ler aynı sayıda satıra ve aynı sırada aynı kayıtlara sahipse:
df <- cbind(df1, df2)
2. Data frame’leri dikey olarak birleştirmek için rbind() işlevini kullanarak—yalnızca aynı sırada görünen, aynı isimde ve aynı veri tipinde eşit sayıda sütuna sahiplerse:
df <- rbind(df1, df2)
3. Genellikle bir ID sütunu olan ortak bir sütuna göre data frame’leri birleştirmek için merge() işlevini kullanarak:
df <- merge(df1, df2, by="ID")
df <- merge(df1, df2, by="ID", all.x=TRUE)
df <- merge(df1, df2, by="ID", all.y=TRUE)
df <- merge(df1, df2, by="ID", all=TRUE)
4. Genellikle bir ID sütunu olan ortak bir sütuna göre data frame’leri birleştirmek için dplyr paketindeki join() işlevini kullanarak:
df <- join(df1, df2, by="ID", type="type_of_join")
type parametresi şu değerlerden birini alır: inner, left, right veya full.
R’de iki veya daha fazla dizgiyi paste() veya cat() işlevlerini kullanarak birleştirebiliriz. İlk yaklaşım daha yaygındır. Her iki işlev de birleştirilecek herhangi sayıda dizgiyi alır ve ayrıca, sonuç dizgide eklenen dizgileri ayıracak karakteri veya karakter dizisini belirleyen isteğe bağlı sep parametresini (ve bazı diğer isteğe bağlı parametreleri) alabilir (varsayılan olarak bir boşluk).
R’de bir data frame’i veya matrisi, sütunların satır; satırların sütun olduğu şekilde döndürebiliriz. Bu amaçla temel R’deki t() işlevini kullanmamız gerekir. Örneğin:
df <- data.frame(col_1=c(10, 20, 30), col_2=c(11, 22, 33))
print(df)
transposed_df <- t(df)
print(transposed_df)
Çıktı:
col_1 col_2
1 10 11
2 20 22
3 30 33
[,1] [,2] [,3]
col_1 10 20 30
col_2 11 22 33
R’de tidyverse koleksiyonunun sağladığı pipe operatörünü (%>%) kullanarak birden çok işlemi zincirleyebiliriz. Bu operatörü kullanmak, bir fonksiyonun çıktısının bir sonrakinin girdisine iletildiği ve bu şekilde hat boyunca devam eden bir fonksiyon hattı (pipeline) oluşturmamıza olanak tanır. Bu, ek değişkenler oluşturma ihtiyacını ortadan kaldırır ve kod okunabilirliğini önemli ölçüde artırır.
Bir data frame üzerinde pipe operatörü kullanımına örnek:
df <- data.frame(a=1:4, b=11:14, c=21:24)
print(df)
df_new <- df %>% select(a, b) %>% filter(a > 2)
print(df_new)
Çıktı:
a b c
1 1 11 21
2 2 12 22
3 3 13 23
4 4 14 24
a b
1 3 12
2 4 13
Veri görselleştirme R programlama dilinin güçlü yönlerinden biri olduğundan, R’de tüm türlerde veri grafikleri oluşturabiliriz:
R ile Veri Görselleştirme yetenek yolculuğu, R grafikleri alanında ufkunuzu genişletmenize yardımcı olacaktır. Veri görselleştirmeyi R’de daha geniş bir bağlamda öğrenmeyi tercih ederseniz, kapsamlı ve başlangıç dostu R ile Veri Bilimci kariyer yolunu keşfedin.
Farklı uzunluklara sahip iki R vektörü üzerinde bir işlem yapmaya çalışırsak, R yorumlayıcısı perde arkasında daha kısa olanı tespit eder, öğelerini aynı sırayla geri dönüştürerek vektörlerin uzunlukları eşit olana kadar tekrarlar ve ancak ondan sonra gerekli işlemi uygular. Vektör geri dönüşümüne başlamadan önce, R yorumlayıcısı vektörlerin uzunluklarının başlangıçta uyuşmadığına dair bir uyarı mesajı verir.
Örneğin, aşağıdaki toplamayı çalıştırmaya çalışırsak:
c(1, 2, 3, 4, 5) + c(1, 2, 3)
İkinci vektör, vektör geri dönüşümü nedeniyle aslında c(1, 2, 3, 1, 2)’ye dönüştürülür. Dolayısıyla bu işlemin nihai sonucu c(2, 4, 6, 5, 7) olacaktır.
Bazen vektör geri dönüşümü faydalı olabilir (ör. vektörlerde değerlerin döngüselliğini beklediğimizde), ancak çoğu zaman uygun değildir ve yanıltıcıdır. Bu nedenle, işlemleri gerçekleştirmeden önce vektörlerin uzunluklarına dikkat etmeliyiz.
next deyimi, belirli bir koşul sağlandığında ilgili yinelemeyi atlamak ve bir sonrakine geçmek için kullanılır. break deyimi ise belirli bir koşul sağlandığında ilgili yinelemede döngüyü durdurmak ve sonlandırmak için kullanılır. İç içe döngülerin içindeki döngülerden birinde kullanıldığında, bu deyim yalnızca o iç döngüden çıkar.
Hem next hem break deyimleri R’deki tüm döngü türlerinde kullanılabilir: for, while ve repeat döngülerinde. Aynı döngü içinde de kullanılabilirler, örn.:
for(i in 1:10) {
if(i < 5)
next
if(i == 8)
break
print(i)}
Çıktı:
[1] 5
[1] 6
[1] 7
str() işlevi bir R nesnesinin yapısını ve onunla ilgili genel bilgileri döndürür; döndürülen içeriğin tam türü, nesnenin veri yapısına bağlıdır. Örneğin, bir vektör için, öğelerinin veri tipini, öğe indislerinin aralığını ve öğe değerlerini (vektör çok uzunsa ilk birkaç değeri) döndürür. Bir data frame için sınıfını (data.frame), gözlem ve değişken sayısını, sütun adlarını, her sütunun veri tipini ve her sütunun ilk birkaç değerini döndürür.
summary() işlevi bir R nesnesi için özet istatistikleri döndürür. Çoğunlukla data frame ve matrislere uygulanır; burada her sayısal sütun için minimum, maksimum, ortalama ve medyan değerleri ile 1. ve 3. çeyreği döndürür; factor sütunları için ise her düzeyin sayısını verir.
R’de subset() işlevi, belirli koşullara göre bir data frame veya matristen satır ve sütunları ya da bir vektörden öğeleri çıkarmak için kullanılır, örn.: subset(my_vector, my_vector > 10).
Buna karşın sample() işlevi R’de yalnızca vektörlere uygulanabilir. Bir vektörün öğelerinden, yerine koymalı veya koymasız, önceden belirlenmiş büyüklükte rastgele bir örnek seçer. Örneğin, sample(my_vector, size=5, replace=TRUE)
1. Temel R’nin transform() ve ifelse() işlevlerini kullanarak:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# df data frame'ine col_3 sütununu ekleme
df <- transform(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)
Çıktı:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
2. Temel R’nin with() ve ifelse() işlevlerini kullanarak:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# df data frame'ine col_3 sütununu ekleme
df["col_3"] <- with(df, ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)
Çıktı:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
3. Temel R’nin apply() işlevini kullanarak:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# df data frame'ine col_3 sütununu ekleme
df["col_3"] <- apply(df, 1, FUN = function(x) if(x[1] < x[2]) x[1] + x[2] else x[1] * x[2])
print(df)
Çıktı:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
4. dplyr paketinin mutate() işlevi ve temel R’nin ifelse() işlevini kullanarak:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# df data frame'ine col_3 sütununu ekleme
df <- mutate(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)
Çıktı:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
R’de bir dizge temsilinden tarih ayrıştırmak için tidyverse koleksiyonundaki lubridate paketini kullanmalıyız. Bu paket, dizgedeki başlangıç tarih desenine dayanarak bir dizgeyi ayrıştırmak ve standart tarihi ondan çıkarmak için çeşitli işlevler sunar. Bu işlevler ymd(), ymd_hm(), ymd_hms(), dmy(), dmy_hm(), dmy_hms(), mdy(), mdy_hm(), mdy_hms() vb.dir; burada y, m, d, h, m ve s sırasıyla yıl, ay, gün, saat, dakika ve saniyeyi ifade eder.
Örneğin, dmy() işlevini "05-11-2023", "05/11/2023" veya "05.11.2023" dizgelerinden herhangi birine uygularsak, aynı sonucu alırız: 2023-11-05. Bunun nedeni, her üç durumda da ayırıcı semboller farklı olsa da aynı desene sahip olmamızdır: gün, ardından ay, ardından yıl.
switch() işlevi, bir ifadeyi bir listedeki öğelere karşı değerlendiren çok yönlü bir dallanma kontrol deyimidir. Sözdizimi şöyledir:
switch(expression, case_1, case_2, case_3....)
switch() işlevine iletilen ifade bir sayı veya karakter dizgesi olarak değerlendirilebilir ve buna bağlı olarak işlevin davranışı değişir.
1. İfade bir sayıya değerlendiriliyorsa, switch() işlevi listedeki öğeyi konumsal eşleşmeye göre döndürür (yani dizini, ifadenin değerlendiği sayıya eşittir). Sayı listedeki öğe sayısından büyükse, switch() NULL döndürür. Örneğin:
switch(2, "circle", "triangle", "square")
Çıktı:
"triangle"
2. İfade bir karakter dizgesine değerlendiriliyorsa, switch() işlevi değeri adına göre döndürür:
switch("red", "green"="apple", "orange"="carot", "red"="tomato", "yellow"="lemon")
Çıktı:
"tomato"
Birden fazla eşleşme varsa, ilk eşleşen değer döndürülür. switch() işlevine son argüman olarak, eşleşme olmadığında varsayılan geri dönüş seçeneği olacak isimsiz bir öğe eklemek de mümkündür. Bu varsayılan seçenek ayarlanmazsa ve eşleşme yoksa işlev NULL döndürür.
switch() işlevi, kodu daha az tekrarlı ve daha okunabilir kıldığı için uzun if-else deyimlerine verimli bir alternatiftir. Genellikle tek bir ifadeyi değerlendirmek için kullanılır. Yine de birden çok ifadeyi değerlendiren daha karmaşık iç içe switch yapıları yazabiliriz. Ancak bu biçimde switch() işlevi hızla okunması zor hale gelir ve dolayısıyla if-else yapıları üzerindeki temel avantajını kaybeder.
Bu işlevlerin tümü, bir döngü kullanmadan bir veri yapısı üzerinde yineleme yapmamıza ve her öğeye aynı işlemi uygulamamıza olanak tanırken, girdi ve çıktı türleri ile gerçekleştirdikleri işlev bakımından farklılık gösterir.
apply()—bir data frame, matris veya dizi alır ve bir vektör, liste, matris veya dizi döndürür. Bu işlev satır bazında, sütun bazında veya her ikisine uygulanabilir.
lapply()—bir vektör, liste veya data frame alır ve her zaman bir liste döndürür. Girdi olarak data frame verildiğinde, yalnızca sütun bazında uygulanır.
sapply()—bir vektör, liste veya data frame alır ve en sadeleştirilmiş veri yapısını döndürür; yani girdi vektörü için vektör, girdi listesi için liste, girdi data frame’i için matris.
tapply()—farklı faktörler (yani kategorik veriler) için özet istatistikler hesaplar.
R’de üç grup kontrol deyimi vardır: koşullu deyimler, döngü deyimleri ve atlama (jump) deyimleri.
Koşullu deyimler:
if—belirli bir koşulun doğru olup olmadığını test eder ve doğruysa yapılacak işlemleri sağlar.
if-else—belirli bir koşulun doğru olup olmadığını test eder, doğruysa yapılacak işlemleri ve aksi durumda yapılacak başka bir işlem setini sağlar.
if... else if... else—bir dizi koşulu tek tek test eder, her koşul doğruysa yapılacak işlemleri ve hiçbir koşul doğru değilse yapılacak yedek işlem setini sağlar.
switch—bir ifadeyi bir listedeki öğelere karşı değerlendirir ve bu değerlendirmenin sonucuna göre listeden bir değer döndürür.
Döngü deyimleri:
for—for döngülerinde, bir dizi üzerinde yineler.
while—while döngülerinde, mevcut yinelemede önceden tanımlı bir mantıksal koşulun (veya birkaç koşulun) sağlanıp sağlanmadığını denetler.
repeat—repeat döngülerinde, önceden tanımlı bir kırılma koşulu (veya birkaç koşul) sağlanana kadar aynı işlemleri sürdürür.
Atlama (jump) deyimleri:
next—belirli bir koşul sağlandığında bir döngünün belirli bir yinelemesini atlar ve bir sonrakine geçer.
break—belirli bir koşul sağlandığında belirli bir yinelemede döngüyü durdurur ve sonlandırır.
return—bir fonksiyondan çıkar ve sonucu döndürür.
R’de veya diğer programlama dillerinde düzenli ifade (regex), belirli bir metin desenini tanımlayan ve metin verilerini madencilikte kullanılan bir karakter veya karakter dizisidir. R’de düzenli ifadelerle çalışmanın iki ana yolu vardır:
grep(), regexpr(), gsub(), regmatches() vb.) kullanarak regex’leri bulmak, eşleştirmek, çıkarmak ve değiştirmek.R Düzenli İfadelerine Rehber, R’de regex ile nasıl çalışılacağı hakkında daha fazla ayrıntı sağlar.
Üç farklı yaklaşımı ve bunların caret paketinde nasıl uygulanacağını ele alalım.
Tüm özelliklerin bir korelasyon matrisini oluşturmalı ve ardından genellikle korelasyon katsayısı 0,75’ten büyük olan yüksek korelasyonluları belirlemeliyiz:
corr_matrix <- cor(features)
highly_correlated <- findCorrelation(corr_matrix, cutoff=0.75)
print(highly_correlated)
Eğitimi kontrol edecek bir eğitim şeması oluşturmalı, bunu seçilen bir modeli kurmak için kullanmalı ve ardından o model için değişken önemini tahmin etmeliyiz:
control <- trainControl(method="repeatedcv", number=10, repeats=5)
model <- train(response_variable~., data=df, method="lvq", preProcess="scale", trControl=control)
importance <- varImp(model)
print(importance)
caret tarafından sağlanan en popüler yöntemlerden biri, geri doğru seçim algoritması olan RFE (Recursive Feature Elimination)’dir.
Seçilen bir yeniden örnekleme yöntemi ve önceden tanımlı bir işlev listesi kullanarak kontrolü hesaplamalı, RFE algoritmasını; özellikleri, hedef değişkeni, tutulacak özellik sayısını ve kontrolü ileterek uygulamalı ve ardından seçilen öngörücüleri çıkarmalıyız:
control <- rfeControl(functions=caretFuncs, method="cv", number=10)
results <- rfe(features, target_variable, sizes=c(1:8), rfeControl=control)
print(predictors(results))
R’de makine öğrenmesi becerilerinizi güçlendirmeniz gerekiyorsa, işte sağlam ve kapsamlı bir kaynak: R ile Makine Öğrenmesi Bilimcisi.
Korelasyon, iki değişken arasındaki doğrusal ilişkinin yönü ve gücünün bir ölçüsüdür. -1 (mükemmel negatif korelasyon) ile 1 (mükemmel pozitif korelasyon) arasında değer alır. Kovaryans, iki değişkenin birbirine göre nasıl değiştiğinin derecesi ve aralarındaki doğrusal ilişkinin yönünün bir ölçüsüdür. Korelasyondan farklı olarak kovaryansın bir aralık sınırı yoktur.
R’de, korelasyonu hesaplamak için cor(), kovaryansı hesaplamak için cov() işlevini kullanmamız gerekir. Her iki işlevin sözdizimi aynıdır: Ölçümü hesaplamak istediğimiz iki değişkeni (vektörü) iletmemiz gerekir (örn. cor(vector_1, vector_2) veya cov(vector_1, vector_2)) ya da tüm değişkenleri arasındaki korelasyonu veya kovaryansı hesaplamak istiyorsak tüm data frame’i (örn. cor(df) veya cov(df)). İki vektör durumunda sonuç tek bir değer olur; data frame durumunda sonuç bir korelasyon (veya kovaryans) matrisi olur.
Aşağıda birkaç yaklaşım ve bunların R’de caret paketiyle nasıl uygulanacağı yer almaktadır.
createDataPartition() işlevini kullanmalı ve p parametresini eğitime gidecek veri oranına ayarlamalıyız.trainControl() işlevinin method parametresini "boot" olarak ayarlamalıyız.Bu çapraz doğrulama yöntemlerini R’de uygulamak için, modelin eğitim kontrolünü tanımlarken trainControl() işlevinin method parametresini sırasıyla "cv", "repeatedcv" veya "LOOCV" olarak ayarlamalıyız.
Ki-kare istatistiksel hipotez testi, iki kategorik değişkenin bağımsız olup olmadığını veya aralarında bir ilişki bulunup bulunmadığını belirlemek için kullanılan bir tekniktir. R’de ki-kare testini uygulamak için stats paketindeki chisq.test() işlevini kullanmalıyız. Adımlar şunlardır:
1. İlgilenilen kategorik değişkenlerle temel R’nin table() işlevini kullanarak bir çapraz tablo oluşturun:
table = table(df["var_1"], df["var_2"])
2. Çapraz tabloyu chisq.test() işlevine iletin:
chisq.test(table)
Ki-kare testlerini ve diğer hipotez testlerini bilgilerinizi tazelemek için R’de Hipotez Testi kursumuza göz atabilirsiniz.
Shiny, yalnızca R kullanarak, HTML, CSS veya JavaScript bilgisi gerektirmeden, veri bilimi için tamamen etkileşimli web uygulamaları ve web sayfaları oluşturmayı kolay ve hızlı hale getiren, açık kaynaklı bir R paketidir. R’de Shiny; çok sayıda temel ve gelişmiş özellik, bileşen, yerleşim, web uygulama örnekleri ve üzerine inşa edip özelleştirilebilecek temel kodlar ile Shiny uygulama geliştirici topluluğu tarafından toplanıp kategorize edilen çeşitli alanlardan (teknoloji, spor, bankacılık, eğitim vb.) kullanıcı vitrinleri sunar.
with() işlevi, bir data frame’in bir veya daha fazla değişkeni üzerinde bir R ifadesini değerlendirir ve sonucu data frame’i değiştirmeden çıktılar. within() işlevi ise bir data frame’in bir veya daha fazla değişkeni üzerinde bir R ifadesini değerlendirir, data frame’i değiştirir ve sonucu çıktılar. Aşağıda bu işlevlerin bir örnek data frame üzerinden nasıl çalıştığını görebiliriz:
df <- data.frame(a = c(1, 2, 3), b = c(10, 20, 30))
print(df)
with(df, a * b)
print(within(df, c <- a * b))
Çıktı:
a b
1 1 10
2 2 20
3 3 30
10 40 90
a b c
1 1 10 10
2 2 20 40
3 3 30 90
within() işlevini kullanırken, yapılan değişiklikleri kaydetmek için işlevin çıktısını bir değişkene atamamız gerekir.
Sonuç olarak, bu makalede en yaygın 40 R programlama mülakat sorusunu ve her biri için beklenen yanıtları ele aldık. Umarız bu bilgilerle, ister R alanında bir iş arıyor olun ister şirketinizdeki açık bir pozisyon için doğru adayı arıyor olun, başarılı bir R mülakatına daha hazır ve kendinizden emin hissedersiniz.
Soruları yanıtlama konusunda pratik yapmak için R ile İstatistik Mülakat Sorularını Pratik Etme kursumuza göz atın.
IBM Sertifikalı Veri Bilimci (2020); daha önce dünya genelindeki petrol ve gaz sahalarında 12+ yıllık uluslararası iş deneyimine sahip Petrol Jeoloğu/Jeomodelleyicisi. Python, R ve SQL konusunda yetkin. Uzmanlık alanları: veri temizleme, veri işleme, veri görselleştirme, veri analizi, veri modelleme, istatistik, hikâye anlatımı, makine öğrenimi. Veri bilimi topluluklarını yönetme ve veri bilimi ile kariyer konularında makale ve eğitim yazma/gözden geçirme konusunda kapsamlı deneyim.
R Yolculuğunuza Bugün Başlayın!
{count, plural, one {Program} other {Program}}
{count, plural, one {Program} other {Program}}
{count, plural, one {Kurs} other {Kurs}}
{count, plural, one {blog} other {blog}}
Dario Radečić
15 dk.

{count, plural, one {blog} other {blog}}
Abid Ali Awan
14 dk.
{count, plural, one {Eğitim} other {Eğitim}}
Adel Nehme
{count, plural, one {Eğitim} other {Eğitim}}
Kurtis Pykes
8 dk.