Yusuf Talha ARABACI tarafından yazılmıştır.
Merhaba, bu yazımızda R programlama konusunu ele alacağız. R dilinin kod yazım kurallarını anlatacağız. R projesinin ne olduğu ile ilgili bilgi edinmek, kurulumları öğrenmek için önceki yazımıza bakabilirsiniz.
İlk Program
R ile hello world yazdıran ilk program ile başlayalım.
myString <- "Hello, World!"
print ( myString)
[1] "Hello, World!"
Her programlama dilinde olduğu gibi R programlama dilinde de çeşitli veri türlerinde değişken tanımlama işlemi yapılır. R programlama dilinde standart tanımlı veri türleri şunlardır:
R programlama dilinde, birçok özel veri türü, nesneler bulunmaktadır. Nesneler, yukarıda verilen standart veri türlerinden türetilmişlerdir. Bunlardan bazılarının ne işe yaradığına ve nasıl kullanıldığına bakalım.
R ortamında bir çift tek tırnak veya bir çift tek tek tırnak içine yazılan herhangi bir değer string olarak kabul edilir. Character değerlerinin birleşmesiyle oluşur. R ortamı içinde dahili olarak da, stringler çift tırnak içinde saklanır.
String tanımlama da, tek tırnak ile başlayan bir string tek tırnak ile bitmelidir. Bu string ifadesinin içine çift tırnak eklenebilir. Aynı şekilde, tek tırnak, çift tırnak ile başlayan ve biten bir stringe eklenebilir. Ancak, çift tırnak ile başlayan ve biten bir stringe çift tırnak ya da tek tırnak ile başlayan ve biten bir stringe tek tırnak eklenemez.
örnek
a <- 'Start and end with single quote'
print(a)
b <- "Start and end with double quotes"
print(b)
c <- "single quote ' in between double quotes"
print(c)
d <- 'Double quotes " in between single quote'
print(d)
[1] "Start and end with single quote"
[1] "Start and end with double quotes"
[1] "single quote ' in between double quote"
[1] "Double quote \" in between single quote"
paste() fonksiyonu
Stringleri birleştirmek için paste() fonksiyonu kullanılır. Fonsiyon, bir araya getirilmesi istenen herhangi bir sayıda string alabilir.
paste(..., sep = " ", collapse = NULL)
Fonksiyonun parametreleri:
örnek
a <- "Hello"
b <- 'How'
c <- "are you? "
print(paste(a,b,c))
print(paste(a,b,c, sep = "-"))
print(paste(a,b,c, sep = "", collapse = ""))
[1] "Hello How are you? "
[1] "Hello-How-are you? "
[1] "HelloHoware you? "
format() fonksiyonu
Sayılar ve stringler, format() fonksiyonu kullanılarak belirli bir stile biçimlendirilebilir.
format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))
Fonksiyonun parametreleri:
örnek
# Total number of digits displayed. Last digit rounded off.
result <- format(23.123456789, digits = 9)
print(result)
# Display numbers in scientific notation.
result <- format(c(6, 13.14521), scientific = TRUE)
print(result)
# The minimum number of digits to the right of the decimal point.
result <- format(23.47, nsmall = 5)
print(result)
# Format treats everything as a string.
result <- format(6)
print(result)
# Numbers are padded with blank in the beginning for width.
result <- format(13.7, width = 6)
print(result)
# Left justify strings.
result <- format("Hello", width = 8, justify = "l")
print(result)
# Justfy string with center.
result <- format("Hello", width = 8, justify = "c")
print(result)
[1] "23.1234568"
[1] "6.000000e+00" "1.314521e+01"
[1] "23.47000"
[1] "6"
[1] " 13.7"
[1] "Hello "
[1] " Hello "
nchar() fonksiyonu
Bu fonksiyon, bir stringdeki boşluklar dahil olmak üzere karakter sayısını sayar. x – bir string olmak üzere:
nchar(x)
kullanılarak bu işlem gerçekleştirilebilir.
toupper()/ tolower() fonksiyonları
Bu fonksiyonlar, bir stringin karakterlerinin büyük/küçük harf durumunu değiştirir. x – üzerinde işlem yapılacak string olmak üzere:
toupper(x)
tolower(x)
fonksiyonları kullanılarak bu işlem gerçekleştirilebilir.
substring() fonksiyonu
Bu fonksiyon, bir stringin parçalarını çıkarır. x – işlem yapılacak string ifadesi, first – alınacak parçanın ilk indisi, last – alınacak parçanın son indisi olmak üzere:
substring(x,first,last)
fonksiyonları kullanılarak bu işlem gerçekleştirilebilir.
Vektörler, birden fazla elemanı tutabilen veri kümeleridir. Birden fazla elemanlı bir vektör oluşturmak için, c() fonksiyonunu kullanırız.
# Create a vector.
apple <- c('red','green',"yellow")
print(apple)
# Get the class of the vector.
print(class(apple))
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[1] "red" "green" "yellow"
[1] "character"
Listeler, içinde vektörler, fonksiyonlar ve başka bir liste gibi birçok farklı öğe türünü içerebilen R nesneleridir.
# Create a list.
list1 <- list(c(2,5,3),21.3,sin)
# Print the list.
print(list1)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[[1]]
[1] 2 5 3
[[2]]
[1] 21.3
[[3]]
function (x) .Primitive("sin")
Matrisler, iki boyutlu bir dikdörtgen veri setidir. Matris fonksiyonuna bir vektör parametresi verilerek oluşturulabilir.
# Create a matrix.
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[,1] [,2] [,3]
[1,] "a" "a" "b"
[2,] "c" "b" "a"
Matrisler iki boyutla sınırlıyken, diziler herhangi bir sayıda boyutta olabilir. Array fonksiyonu, gerekli sayıda boyut oluşturan bir dim niteliği alır. Aşağıdaki örnekte, her biri 3×3 matris olan iki elemanlı bir dizi oluşturulur.
# Create an array.
a <- array(c('green','yellow'),dim = c(3,3,2))
print(a)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
, , 1
[,1] [,2] [,3]
[1,] "green" "yellow" "green"
[2,] "yellow" "green" "yellow"
[3,] "green" "yellow" "green"
, , 2
[,1] [,2] [,3]
[1,] "yellow" "green" "yellow"
[2,] "green" "yellow" "green"
[3,] "yellow" "green" "yellow"
Faktörler, bir vektör kullanılarak oluşturulan R nesneleridir. Vektörü, vektördeki öğelerin farklı değerleriyle birlikte etiketler olarak saklar. Etiketler, girdi vektöründe character, numeric veya boolean vb. türde olup olmadığına bakılmaksızın her zaman karakterdir. İstatistiksel modellemede faydalıdırlar.
Faktörler, factor() fonksiyonu kullanılarak oluşturulur. nlevels fonksiyonu, seviyelerin sayısını verir.
# Create a vector.
apple_colors <- c('green','green','yellow','red','red','red','green')
# Create a factor object.
factor_apple <- factor(apple_colors)
# Print the factor.
print(factor_apple)
print(nlevels(factor_apple))
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[1] green green yellow red red red green
Levels: green red yellow
[1] 3
Data Frameler, tablo halindeki veri nesneleridir. Data Frame’de bir matrisin aksine, her sütun farklı veri türleri içerebilir. İlk sütun numeric, ikinci sütun character ve üçüncü sütun logical olabilir. Eşit uzunluktaki vektörler listesidir. data.frame() fonksiyonu kullanılarak oluşturulur.
# Create the data frame.
BMI <- data.frame(
gender = c("Male", "Male","Female"),
height = c(152, 171.5, 165),
weight = c(81,93, 78),
Age = c(42,38,26)
)
print(BMI)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
gender height weight Age
1 Male 152.0 81 42
2 Male 171.5 93 38
3 Female 165.0 78 26
Operatör, belirli matematiksel veya mantıksal işlemleri yapılmasını sağlayan bir semboldür. R dili, yerleşik operatörler açısından zengindir. Operatörleri beş sınıfa ayırabiliriz:
İki vektörü toplamak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v+t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 10.0 8.5 10.0
Birinci vektörden ikincisini çıkarmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v-t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] -6.0 2.5 2.0
İki vektörü çarpmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v*t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 16.0 16.5 24.0
İlk vektörü ikincisine bölmek için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v/t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 0.250000 1.833333 1.500000
İlk vektörün ikincisine bölümünden kalanı bulmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v%%t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 2.0 2.5 2.0
İlk vektörün ikincisine bölümünün tam sonucunu bulmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v%/%t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 0 1 1
Üs almak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v^t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 256.000 166.375 1296.000
Büyüktür operatörü. İlk ifade ikincisinden büyükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v>t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE TRUE FALSE FALSE
Küçüktür operatörü. İlk ifade ikincisinden küçükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v < t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE FALSE TRUE FALSE
Eşitlik Operatörü. Verilen iki ifade eşitse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v==t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE FALSE FALSE TRUE
Küçük eşittir operatörü. İlk ifade ikincisine eşit veya ikincisinden küçükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v<=t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE FALSE TRUE TRUE
Büyük eşittir operatörü. İlk ifade ikincisine eşit veya ikincisinden büyükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v>=t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE TRUE FALSE TRUE
Değil eşit Operatörü. Verilen iki ifade eşit değilse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v!=t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE TRUE TRUE FALSE
Ve operatörü. ilk vektör ve ikinci vektörde karşılık gelen elemanların her biri için değer döndürür.
v <- c(3,1,TRUE,2+3i)
t <- c(4,1,FALSE,2+3i)
print(v&t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE TRUE FALSE TRUE
Veya operatörü. ilk vektör ve ikinci vektörde karşılık gelen elemanların her biri için değer döndürür.
v <- c(3,0,TRUE,2+2i)
t <- c(4,0,FALSE,2+3i)
print(v|t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE FALSE TRUE TRUE
Ve operatörü. ilk ve ikinci vektörü kıyaslar ve tek bir değer döndürür.
v <- c(3,0,TRUE,2+2i)
t <- c(1,3,TRUE,2+3i)
print(v&&t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE
Veya operatörü. ilk ve ikinci vektörü kıyaslar ve tek bir değer döndürür.
v <- c(0,0,TRUE,2+2i)
t <- c(0,3,TRUE,2+3i)
print(v||t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE
Değil operatörü. Vektörde her elmanın ters değerini döndürür.
v <- c(3,0,TRUE,2+2i)
print(!v)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE TRUE FALSE FALSE
Genel atama operatörüdür.
v3 = c(3,1,TRUE,2+3i)
print(v3)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
Sola atama operatörü
v1 <- c(3,1,TRUE,2+3i)
v2 <<- c(3,1,TRUE,2+3i)
print(v1)
print(v2)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
Sağa atama operatörü
c(3,1,TRUE,2+3i) -> v1
c(3,1,TRUE,2+3i) ->> v2
print(v1)
print(v2)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
Kolon Operatörü. Bir vektör için sırayla bir dizi sayı oluşturur.
v <- 2:8
print(v)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 2 3 4 5 6 7 8
Bu operatör, bir elemanın bir vektöre ait olup olmadığını belirlemek için kullanılır.
v1 <- 8
v2 <- 12
t <- 1:10
print(v1 %in% t)
print(v2 %in% t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
Bu operatör, bir matrisi devrik ile çarpmak için kullanılır.
M = matrix( c(2,6,5,1,10,4), nrow=2,ncol=3,byrow =
TRUE)
t = M %*% t(M)
print(t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[,1] [,2]
[1,] 65 82
[2,] 82 117
Koşul yapıları, programcının bir veya daha fazla koşul altında programın nasıl seyredeceğini belirlemesini sağlar.
Bir if ifadesi, bir veya daha fazla ifadenin izlediği bir mantıksal ifadeden oluşur.
R’de bir if ifadesi oluşturmak için temel sözdizimi şöyledir:
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
}
Örnek
x <- c("what","is","truth")
if("Truth" %in% x){
print("Truth is found")
} else {
print("Truth is not found")
}
[1] "Truth is not found"
Bir if ifadesini, mantıksal ifadesi yanlış olduğunda yürütülen isteğe bağlı bir else ifadesi izleyebilir.
R’de if…else ifadesi oluşturmak için temel sözdizimi şöyledir:
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
} else {
// statement(s) will execute if the boolean expression is false.
}
Örnek
x <- c("what","is","truth")
if("Truth" %in% x){
print("Truth is found")
} else {
print("Truth is not found")
}
[1] "Truth is not found"
Bir switch ifadesi, bir değişkenin bir değerler listesine göre eşitlik açısından test edilmesini sağlar. Her bir değere durum adı verilir ve açılan değişken her durum için kontrol edilir.
R’de bir switch ifadesi oluşturmak için temel sözdizimi şöyledir:
switch(expression, case1, case2, case3....)
Örnek
x <- switch(
3,
"first",
"second",
"third",
"fourth"
)
print(x)
[1] "third"
Bir kod bloğunu birkaç kez çalıştırmanız gerektiğinde kullanılan ifadedir.
Programlama dillerinin çoğunda bir döngü ifadesinin genel biçimi aşağıdadır:
Repeat döngüsü, bir durdurma koşulu ile karşılanana kadar aynı kodu tekrar tekrar yürütür.
R’da bir repeat döngüsü oluşturmak için temel sözdizimi şöyledir:
repeat {
commands
if(condition){
break
}
}
örnek
v <- c("Hello","loop")
cnt <- 2
repeat{
print(v)
cnt <- cnt+1
if(cnt > 5){
break
}
}
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
while döngüsü, bir durdurma koşulu sağlanana kadar aynı kodu tekrar tekrar yürütür.
R’da bir while döngüsü oluşturmak için temel sözdizimi şöyledir:
while (test_expression) {
statement
}
örnek
v <- c("Hello","while loop")
cnt <- 2
while (cnt < 7){
print(v)
cnt = cnt + 1
}
[1] "Hello" "while loop"
[1] "Hello" "while loop"
[1] "Hello" "while loop"
[1] "Hello" "while loop"
[1] "Hello" "while loop"
For döngüsü, belirli sayıda yürütmesi gereken bir döngüyü verimli bir şekilde yazmanıza olanak tanıyan bir döngü kontrol yapısıdır.
R’da bir for döngüsü ifadesi oluşturmak için temel sözdizimi şöyledir:
for (value in vector) {
statements
}
örnek
v <- LETTERS[1:4]
for ( i in v) {
print(i)
}
[1] "A"
[1] "B"
[1] "C"
[1] "D
Döngü kontrol ifadeleri, yürütmenin normal seyrini değiştiren ifadelerdir. Bunlar break ve next deyimleridir.
R programlama dilindeki break ifadesi aşağıdaki iki kullanıma sahiptir:
örnek
v <- c("Hello","loop")
cnt <- 2
repeat{
print(v)
cnt <- cnt+1
if(cnt > 5){
break
}
}
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop
R programlama dilindeki next ifadesi, bir döngünün mevcut yinelemesini sonlandırmadan sonraki yinelemeye atlamak istediğimizde kullanışlıdır. Program next ile karşılaştığında atlar ve döngünün bir sonraki yinelemesini başlatır.
örnek
v <- LETTERS[1:6]
for ( i in v){
if (i == "D"){
next
}
print(i)
}
[1] "A"
[1] "B"
[1] "C"
[1] "E"
[1] "F"
Fonksiyon, belirli bir görevi gerçekleştirmek için birlikte düzenlenen bir dizi ifadedir. R’in çok sayıda yerleşik fonksiyonu vardır. Bunun yanında, kullanıcı kendi fonksiyonlarını da oluşturabilir. R’da her fonksiyon bir nesnedir, bu nedenle R yorumlayıcısı, fonksiyonun eylemleri gerçekleştirmesi için gerekli olabilecek argümanlarla birlikte fonksiyonu değişkene iletebilir.
Bir R fonksiyonunun temel sözdizimi aşağıdaki gibidir:
function_name <- function(arg_1, arg_2, ...) {
Function body
}
örnek
Sırayla sayıların karelerini yazdırmak için bir fonksiyon oluşturalım.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
Oluşturduğumuz fonksiyonu çağıralım.
new.function(6)
Kod çalıştırıldığında aşağıdaki çıktıyı alırız.
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
R paketi, R fonksiyonlarının, derlenmiş kodların ve örnek verilerin olduğu bir koleksiyonudur. Paketler, R ortamında “library” adlı bir dizinin altnda saklanırlar. R kurulumu esnasında varsayılan olarak bir paket kümesi yükler. Yapılacak projenin gereksinimlerine göre ihtiyaç duyulduğunda daha fazla paket eklenebilir. Bütün R paketleri CRAN üzerinde R Packages‘de listelenmiş şekilde bulunmaktadır.
Tüm paketlerin listesini almak için library() fonksiyonunu kullanılır.
library()
Packages in library ‘C:/Program Files/R/R-3.2.2/library’:
base The R Base Package
boot Bootstrap Functions (Originally by Angelo Canty
for S)
class Functions for Classification
cluster "Finding Groups in Data": Cluster Analysis
Extended Rousseeuw et al.
codetools Code Analysis Tools for R
compiler The R Compiler Package
datasets The R Datasets Package
foreign Read Data Stored by 'Minitab', 'S', 'SAS',
'SPSS', 'Stata', 'Systat', 'Weka', 'dBase', ...
graphics The R Graphics Package
grDevices The R Graphics Devices and Support for Colours
and Fonts
grid The Grid Graphics Package
KernSmooth Functions for Kernel Smoothing Supporting Wand
& Jones (1995)
lattice Trellis Graphics for R
MASS Support Functions and Datasets for Venables and
Ripley's MASS
Matrix Sparse and Dense Matrix Classes and Methods
methods Formal Methods and Classes
mgcv Mixed GAM Computation Vehicle with GCV/AIC/REML
Smoothness Estimation
nlme Linear and Nonlinear Mixed Effects Models
nnet Feed-Forward Neural Networks and Multinomial
Log-Linear Models
parallel Support for Parallel computation in R
rpart Recursive Partitioning and Regression Trees
spatial Functions for Kriging and Point Pattern
Analysis
splines Regression Spline Functions and Classes
stats The R Stats Package
stats4 Statistical Functions using S4 Classes
survival Survival Analysis
tcltk Tcl/Tk Interface
tools Tools for Package Development
utils The R Utils Package
R ortamında şu anda yüklü olan tüm paketleri görmek için search() fonksiyonu kullanılır.
search()
[1] ".GlobalEnv" "tools:rstudio" "package:stats" "package:graphics" "package:grDevices"
[6] "package:utils" "package:datasets" "package:methods" "Autoloads" "package:base"
Yeni R paketleri eklemenin iki yolu vardır. Biri doğrudan CRAN üzerinden, diğeri manuel olarak kurulumdur.
Aşağıdaki komut, paketleri doğrudan CRAN sayfasından alır ve paketi R ortamına kurar.
install.packages("Package Name")
# Install the package named "XML".
install.packages("XML")
Manuel kurulum, gerekli paketin zip dosyası halinde indirilip R ortamında kurulumunu kapsar. Bunun için aşağıdaki komutu çalıştırabilirsiniz.
install.packages(file_name_with_path, repos = NULL, type = "source")
# Install the package named "XML"
install.packages("E:/XML_3.98-1.3.zip", repos = NULL, type = "source")
Bir paket kodda kullanılmadan önce mevcut R ortamına eklenmelidir. Bunun için library() fonksiyonu kullanılır.
library("package Name", lib.loc = "path to library")
R’da, R ortamının dışında depolanan dosyalardan veri okuyabiliriz. Ayrıca, işletim sistemi tarafından saklanacak ve erişilecek dosyalara veri yazabiliriz. R, csv, excel, xml vb. gibi çeşitli dosya biçimlerini okuyabilir ve yazabilir.
R ortamında, bir csv dosyasından veri okuyabilir ve bir csv dosyasına veri yazabiliriz. Dosya, R’ın okuyabilmesi için mevcut çalışma dizininde bulunmalıdır. Bunun yanında, kendi dizinimizi de ayarlayabilir ve oradan dosyaları okuyabiliriz.
getwd() fonksiyonunu kullanarak R mevcut çalışma dizinini kontrol edebilirsiniz. Ayrıca setwd() fonksiyonunu kullanarak yeni bir çalışma dizini ayarlayabilirsiniz.
# Get and print current working directory.
print(getwd())
# Set current working directory.
setwd("/web/com")
# Get and print current working directory.
print(getwd())
[1] "/web/com/1441086124_2016"
[1] "/web/com"
Mevcut çalışma dizininizde bulunan bir CSV dosyasını okumak için read.csv() fonksiyonunu kullanabiliriz. Bu fonksiyon bize bir data frame döndürür.
data <- read.csv("input.csv")
print(data)
id, name, salary, start_date, dept
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
R, data frame’den csv dosyası oluşturabilir. write.csv() fonksiyonu, csv dosyasını oluşturmak için kullanılır. Bu dosya çalışma dizininde oluşturulur.
# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
# Write filtered data into a new file.
write.csv(retval,"output.csv")
newdata <- read.csv("output.csv")
print(newdata)
X id name salary start_date dept
1 3 3 Michelle 611.00 2014-11-15 IT
2 4 4 Ryan 729.00 2014-05-11 HR
3 5 NA Gary 843.25 2015-03-27 Finance
4 8 8 Guru 722.50 2014-06-17 Finance
Microsoft Excel, verileri .xls veya .xlsx biçiminde depolayan en yaygın kullanılan elektronik tablo programıdır. R, bazı Excel’e özgü paketleri kullanarak bu dosyalardan doğrudan okuyabilir ve yazabilir.
“xlsx” paketini kurmak için R konsolunda aşağıdaki komutu kullanabilirsiniz. Bu paketin bağımlı olduğu bazı ek paketlerin yüklenmesini isteyebilir. Ek paketleri kurmak için gerekli paket adıyla aynı komutu izleyin.
install.packages("xlsx")
R ortamında veri okumak için, read.xlsx() fonksiyonu kullanılır. Sonuç, R ortamında bir data frame olarak saklanır.
# Read the first worksheet in the file input.xlsx.
data <- read.xlsx("input.xlsx", sheetIndex = 1)
print(data)
id, name, salary, start_date, dept
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
R ortamında, mevcut bir excel dosyasına yazmak için write.xlsx() fonksiyonu kullanılır . Veriler matris veya data frame biçiminde iletilir.
df
write.xlsx(df, file = "mydata.xlsx")
İkili dosya, yalnızca bit ve bayt (0’lar ve 1’ler) biçiminde depolanan bilgileri içeren bir dosyadır. İçindeki baytlar, yazdırılamayan birçok başka karakter içeren karakterlere ve sembollere çevrildiği için insan tarafından okunamazlar. Herhangi bir metin düzenleyiciyi kullanarak ikili bir dosyayı okumaya çalışmak, Ø ve ð gibi karakterleri gösterecektir.
İkili dosyanın kullanılabilir olması için belirli programlar tarafından okunması gerekir. Bazen, diğer programlar tarafından oluşturulan verilerin R tarafından ikili dosya olarak işlenmesi gerekir. Ayrıca R, diğer programlarla paylaşılabilen ikili dosyalar oluşturmak için gereklidir.
R’ın ikili dosyalar oluşturmak ve okumak için writeBin() ve readBin() olmak üzere iki fonksiyonu vardır.
writeBin(object, con)
readBin(con, what, n )
Kullanılan parametreler:
“mtcars” data frame’ini bir csv dosyası olarak okuyup ikili dosya olarak yazalım.
# Read the "mtcars" data frame as a csv file and store only the columns
"cyl", "am" and "gear".
write.table(mtcars, file = "mtcars.csv",row.names = FALSE, na = "",
col.names = TRUE, sep = ",")
# Store 5 records from the csv file as a new data frame.
new.mtcars <- read.table("mtcars.csv",sep = ",",header = TRUE,nrows = 5)
# Create a connection object to write the binary file using mode "wb".
write.filename = file("/web/com/binmtcars.dat", "wb")
# Write the column names of the data frame to the connection object.
writeBin(colnames(new.mtcars), write.filename)
# Write the records in each of the column to the file.
writeBin(c(new.mtcars$cyl,new.mtcars$am,new.mtcars$gear), write.filename)
# Close the file for writing so that it can be read by other program.
close(write.filename)
Yukarıda oluşturulan ikili dosya, tüm verileri bayt olarak depolar. Bu yüzden sütun değerlerinin yanı sıra sütun adlarının da uygun değerlerini seçerek okuyalım.
# Create a connection object to read the file in binary mode using "rb".
read.filename <- file("/web/com/binmtcars.dat", "rb")
# First read the column names. n = 3 as we have 3 columns.
column.names <- readBin(read.filename, character(), n = 3)
# Next read the column values. n = 18 as we have 3 column names and 15 values.
read.filename <- file("/web/com/binmtcars.dat", "rb")
bindata <- readBin(read.filename, integer(), n = 18)
# Print the data.
print(bindata)
# Read the values from 4th byte to 8th byte which represents "cyl".
cyldata = bindata[4:8]
print(cyldata)
# Read the values form 9th byte to 13th byte which represents "am".
amdata = bindata[9:13]
print(amdata)
# Read the values form 9th byte to 13th byte which represents "gear".
geardata = bindata[14:18]
print(geardata)
# Combine all the read values to a dat frame.
finaldata = cbind(cyldata, amdata, geardata)
colnames(finaldata) = column.names
XML, Genişletilebilir İşaretleme Dili anlamına gelir. HTML’ye benzer şekilde, biçimlendirme etiketleri içerir. Ancak, xml’de biçimlendirme etiketleri, dosyanın içerdiği verilerin anlamını tanımlar.
“XML” paketini kullanarak bir xml dosyasını R’de okuyabilirsiniz. Bu paket aşağıdaki komut kullanılarak kurulabilir.
install.packages("XML")
xml dosyası, xmlParse() fonksiyonu kullanılarak R tarafından okunur. R’da bir liste olarak saklanır.
örnek
# Load the package required to read XML files.
library("XML")
# Also load the other required package.
library("methods")
# Give the input file name to the function.
result <- xmlParse(file = "input.xml")
JSON dosyası, verileri insan tarafından okunabilir biçimde metin olarak depolar. R, rjson paketini kullanarak JSON dosyalarını okuyabilir.
R konsolunda, rjson paketini kurmak için aşağıdaki komutu kullanabilirsiniz.
install.packages("rjson")
JSON dosyası, fromJSON() fonksiyonu kullanılarak R tarafından okunur ve bir liste olarak saklanır.
örnek
# Load the package required to read JSON files.
library("rjson")
# Give the input file name to the function.
result <- fromJSON(file = "input.json")
Birçok web sitesi, kullanıcılar için önemli veriler barındırır. Örneğin, Dünya Sağlık Örgütü (WHO), sağlık ve tıbbi bilgiler hakkında CSV, txt ve XML dosyaları biçiminde raporlar sağlar. R programlarını kullanarak, bu tür web sitelerinden programlı olarak belirli verileri çıkarabiliriz. Web’den veri toplamak için kullanılan R’deki bazı paketler – “RCurl”, XML” ve “stringr”. Bunlar URL’lere bağlanmak, dosyalar için gerekli bağlantıları belirlemek ve bunları indirmek için kullanılır.
URL’leri ve dosyalara olan bağlantıları işlemek için aşağıdaki paketler gereklidir. R Ortamınızda yoksa, aşağıdaki komutları kullanarak kurabilirsiniz.
install.packages("RCurl")
install.packages("XML")
install.packages("stringr")
install.packages("plyr")
Dosyaların URL’lerini toplamak için getHTMLLinks() fonksiyonunu kullanacağız. Ardından dosyaları yerel sisteme kaydetmek için download.file() fonksiyonunu kullanacağız. Birden fazla dosya için aynı kodu tekrar tekrar uygulayacağımız için birden çok kez çağrılacak bir fonksiyon oluşturacağız. Dosya adları, bu fonksiyona bir R listesi nesnesi biçiminde parametreler olarak iletilir.
örnek
# Read the URL.
url <- "http://www.geos.ed.ac.uk/~weather/jcmb_ws/"
# Gather the html links present in the webpage.
links <- getHTMLLinks(url)
# Identify only the links which point to the JCMB 2015 files.
filenames <- links[str_detect(links, "JCMB_2015")]
# Store the file names as a list.
filenames_list <- as.list(filenames)
# Create a function to download the files by passing the URL and filename list.
downloadcsv <- function (mainurl,filename) {
filedetails <- str_c(mainurl,filename)
download.file(filedetails,filename)
}
# Now apply the l_ply function and save the files into the current R working directory.
l_ply(filenames,downloadcsv,mainurl = "http://www.geos.ed.ac.uk/~weather/jcmb_ws/")
Veriler, ilişkisel veritabanı sistemlerinde normalleştirilmiş bir biçimde saklanır. R, MySql, Oracle, Sql server vb. gibi birçok ilişkisel veritabanına kolayca bağlanabilir ve onlardan data freame olarak kayıtları alabilir. Veriler R ortamına çekildiğinde, normal bir R veri seti haline gelir, paketler ve fonksiyonlar kullanılarak analiz edilebilir.
Bu kısımda, R’a bağlanmak için referans veritabanı olarak MySql’i kullanacağız.
R, MySql veritabanı ile bağlantı sağlayan “RMySQL” adlı bir pakete sahiptir. Bu paketi aşağıdaki komutu kullanarak R ortamına kurabilirsiniz.
install.packages("RMySQL")
Paket yüklendikten sonra, veritabanına bağlanmak için R’da bir bağlantı nesnesi oluşturuyoruz. Parametre olarak kullanıcı adı, şifre, veritabanı adı ve ana bilgisayar adını veriyouz.
# Create a connection Object to MySQL database.
# We will connect to the sampel database named "sakila" that comes with MySql installation.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila',
host = 'localhost')
# List the tables available in this database.
dbListTables(mysqlconnection)
[1] "actor" "actor_info"
[3] "address" "category"
[5] "city" "country"
[7] "customer" "customer_list"
[9] "film" "film_actor"
[11] "film_category" "film_list"
[13] "film_text" "inventory"
[15] "language" "nicer_but_slower_film_list"
[17] "payment" "rental"
[19] "sales_by_film_category" "sales_by_store"
[21] "staff" "staff_list"
[23] "store"
MySql’deki veritabanı tablolarını dbSendQuery() fonksiyonunu kullanarak sorgulayabiliriz. Sorgu MySql’de yürütülür ve sonuç kümesi fetch() fonksiyonu kullanılarak döndürülür. Son olarak, R’da bir data frame olarak saklanır.
# Query the "actor" tables to get all the rows.
result = dbSendQuery(mysqlconnection, "select * from actor")
# Store the result in a R data frame object. n = 5 is used to fetch first 5 rows.
data.frame = fetch(result, n = 5)
print(data.fame)
actor_id first_name last_name last_update
1 1 PENELOPE GUINESS 2006-02-15 04:34:33
2 2 NICK WAHLBERG 2006-02-15 04:34:33
3 3 ED CHASE 2006-02-15 04:34:33
4 4 JENNIFER DAVIS 2006-02-15 04:34:33
5 5 JOHNNY LOLLOBRIGIDA 2006-02-15 04:34:33
R’da veri biçimlendirme, verileri satır-sütunlar halinde düzenleme, şeklini değiştirmekle ilgilidir. Bu işlemler genelde data frame üzerinde yapılır. Bir data frame’in satırlarından ve sütunlarından veri çekmek oldukça kolaydır.
R’ın bir data frame’deki satırları sütunlara bölmek, birleştirmek ve değiştirmek için birçok fonksiyonu vardır.
cbind() fonksiyonunu kullanarak bir data frame oluşturmak için birden çok vektörü birleştirebiliriz. Ayrıca, rbind() fonksiyonunu kullanarak iki data frame’i birleştirebiliriz.
# Create vector objects.
city <- c("Tampa","Seattle","Hartford","Denver")
state <- c("FL","WA","CT","CO")
zipcode <- c(33602,98104,06161,80294)
# Combine above three vectors into one data frame.
addresses <- cbind(city,state,zipcode)
# Print a header.
cat("# # # # The First data frame\n")
# Print the data frame.
print(addresses)
# Create another data frame with similar columns
new.address <- data.frame(
city = c("Lowry","Charlotte"),
state = c("CO","FL"),
zipcode = c("80230","33949"),
stringsAsFactors = FALSE
)
# Print a header.
cat("# # # The Second data frame\n")
# Print the data frame.
print(new.address)
# Combine rows form both the data frames.
all.addresses <- rbind(addresses,new.address)
# Print a header.
cat("# # # The combined data frame\n")
# Print the result.
print(all.addresses)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
# # # # The First data frame
city state zipcode
[1,] "Tampa" "FL" "33602"
[2,] "Seattle" "WA" "98104"
[3,] "Hartford" "CT" "6161"
[4,] "Denver" "CO" "80294"
# # # The Second data frame
city state zipcode
1 Lowry CO 80230
2 Charlotte FL 33949
# # # The combined data frame
city state zipcode
1 Tampa FL 33602
2 Seattle WA 98104
3 Hartford CT 6161
4 Denver CO 80294
5 Lowry CO 80230
6 Charlotte FL 33949
merge() fonksiyonunu kullanarak iki data frame’i birleştirebiliriz. Birleştirmenin gerçekleştiği data framelerin sütun adları aynı olmalıdır.
Aşağıdaki örnekte, “MASS” kitaplığında bulunan Pima veri kümelerini ele alıyoruz.
library(MASS)
merged.Pima <- merge(x = Pima.te, y = Pima.tr,
by.x = c("bp", "bmi"),
by.y = c("bp", "bmi")
)
print(merged.Pima)
nrow(merged.Pima)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
bp bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y
1 60 33.8 1 117 23 0.466 27 No 2 125 20 0.088
2 64 29.7 2 75 24 0.370 33 No 2 100 23 0.368
3 64 31.2 5 189 33 0.583 29 Yes 3 158 13 0.295
4 64 33.2 4 117 27 0.230 24 No 1 96 27 0.289
5 66 38.1 3 115 39 0.150 28 No 1 114 36 0.289
6 68 38.5 2 100 25 0.324 26 No 7 129 49 0.439
7 70 27.4 1 116 28 0.204 21 No 0 124 20 0.254
8 70 33.1 4 91 32 0.446 22 No 9 123 44 0.374
9 70 35.4 9 124 33 0.282 34 No 6 134 23 0.542
10 72 25.6 1 157 21 0.123 24 No 4 99 17 0.294
11 72 37.7 5 95 33 0.370 27 No 6 103 32 0.324
12 74 25.9 9 134 33 0.460 81 No 8 126 38 0.162
13 74 25.9 1 95 21 0.673 36 No 8 126 38 0.162
14 78 27.6 5 88 30 0.258 37 No 6 125 31 0.565
15 78 27.6 10 122 31 0.512 45 No 6 125 31 0.565
16 78 39.4 2 112 50 0.175 24 No 4 112 40 0.236
17 88 34.5 1 117 24 0.403 40 Yes 4 127 11 0.598
age.y type.y
1 31 No
2 21 No
3 24 No
4 21 No
5 21 No
6 43 Yes
7 36 Yes
8 40 No
9 29 Yes
10 28 No
11 55 No
12 39 No
13 39 No
14 49 Yes
15 49 Yes
16 38 No
17 28 No
[1] 17
R programlamanın en ilginç yönlerinden biri, istenen veri şeklini elde etmek için verilerin şeklini birden fazla adımda değiştirmekle ilgilidir. Bunu yapmak için kullanılan fonksiyonlar melt() ve cast()’dir. Bunun için “MASS” adlı kütüphanede bulunan ships adlı veri setini ele alıyoruz.
library(MASS)
print(ships)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
type year period service incidents
1 A 60 60 127 0
2 A 60 75 63 0
3 A 65 60 1095 3
4 A 65 75 1095 4
5 A 70 60 1512 6
.............
.............
8 A 75 75 2244 11
9 B 60 60 44882 39
10 B 60 75 17176 29
11 B 65 60 28609 58
............
............
17 C 60 60 1179 1
18 C 60 75 552 1
19 C 65 60 781 0
............
............
Şimdi verileri düzenlemek için melt ediyoruz, tür ve yıl dışındaki tüm sütunları birden çok satıra dönüştürüyoruz.
molten.ships <- melt(ships, id = c("type","year"))
print(molten.ships)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
type year variable value
1 A 60 period 60
2 A 60 period 75
3 A 65 period 60
4 A 65 period 75
............
............
9 B 60 period 60
10 B 60 period 75
11 B 65 period 60
12 B 65 period 75
13 B 70 period 60
...........
...........
41 A 60 service 127
42 A 60 service 63
43 A 65 service 1095
...........
...........
70 D 70 service 1208
71 D 75 service 0
72 D 75 service 2051
73 E 60 service 45
74 E 60 service 0
75 E 65 service 789
...........
...........
101 C 70 incidents 6
102 C 70 incidents 2
103 C 75 incidents 0
104 C 75 incidents 1
105 D 60 incidents 0
106 D 60 incidents 0
...........
...........
Melt edilmiş verileri, her yıl için her gemi tipinin toplamının oluşturulduğu yeni bir forma dönüştürebilir, cast edebiliriz.
recasted.ship <- cast(molten.ships, type+year~variable,sum)
print(recasted.ship)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
type year period service incidents
1 A 60 135 190 0
2 A 65 135 2190 7
3 A 70 135 4865 24
4 A 75 135 2244 11
5 B 60 135 62058 68
6 B 65 135 48979 111
7 B 70 135 20163 56
8 B 75 135 7117 18
9 C 60 135 1731 2
10 C 65 135 1457 1
11 C 70 135 2731 8
12 C 75 135 274 1
13 D 60 135 356 0
14 D 65 135 480 0
15 D 70 135 1557 13
16 D 75 135 2051 4
17 E 60 135 45 0
18 E 65 135 1226 14
19 E 70 135 3318 17
20 E 75 135 542 1
[TR] R Programlama Temelleri
Merhaba, bu yazımızda R programlama konusunu ele alacağız. R dilinin kod yazım kurallarını anlatacağız. R projesinin ne olduğu ile ilgili bilgi edinmek, kurulumları öğrenmek için önceki yazımıza bakabilirsiniz.
İlk Program
R ile hello world yazdıran ilk program ile başlayalım.
myString <- "Hello, World!"
print ( myString)
[1] "Hello, World!"
Değişken Tanımlama
Her programlama dilinde olduğu gibi R programlama dilinde de çeşitli veri türlerinde değişken tanımlama işlemi yapılır. R programlama dilinde standart tanımlı veri türleri şunlardır:
- numeric: Genel olarak sayılar için kullanılan veri türü. Örneğin; 10.5, 55, 787
- integer: Tamsayılar için kullanılan veri türü. Örneğin; 1, 22, 5, 7
- complex: Karmaşık sayılar için kullanılan veri türü. Örneğin; 9 + 3i, 5+7i, 2+i
- character: Karakter değerleri için kullanılan veri türü, diğer adıyla string.
- logical: TRUE ya da FALSE değerleri alan veri türü, diğer adıyla boolean.
R programlama dilinde, birçok özel veri türü, nesneler bulunmaktadır. Nesneler, yukarıda verilen standart veri türlerinden türetilmişlerdir. Bunlardan bazılarının ne işe yaradığına ve nasıl kullanıldığına bakalım.
String
R ortamında bir çift tek tırnak veya bir çift tek tek tırnak içine yazılan herhangi bir değer string olarak kabul edilir. Character değerlerinin birleşmesiyle oluşur. R ortamı içinde dahili olarak da, stringler çift tırnak içinde saklanır.
String tanımlama da, tek tırnak ile başlayan bir string tek tırnak ile bitmelidir. Bu string ifadesinin içine çift tırnak eklenebilir. Aynı şekilde, tek tırnak, çift tırnak ile başlayan ve biten bir stringe eklenebilir. Ancak, çift tırnak ile başlayan ve biten bir stringe çift tırnak ya da tek tırnak ile başlayan ve biten bir stringe tek tırnak eklenemez.
örnek
a <- 'Start and end with single quote'
print(a)
b <- "Start and end with double quotes"
print(b)
c <- "single quote ' in between double quotes"
print(c)
d <- 'Double quotes " in between single quote'
print(d)
[1] "Start and end with single quote"
[1] "Start and end with double quotes"
[1] "single quote ' in between double quote"
[1] "Double quote \" in between single quote"
String Biçimlendirme
paste() fonksiyonu
Stringleri birleştirmek için paste() fonksiyonu kullanılır. Fonsiyon, bir araya getirilmesi istenen herhangi bir sayıda string alabilir.
paste(..., sep = " ", collapse = NULL)
Fonksiyonun parametreleri:
- … : Birleştirilecek herhangi bir sayıda argümanı temsil eder.
- sep: Bağımsız değişkenler arasındaki herhangi bir ayırıcıyı temsil eder.
- collapse: İki string arasındaki boşluğu ortadan kaldırmak için kullanılır.
örnek
a <- "Hello"
b <- 'How'
c <- "are you? "
print(paste(a,b,c))
print(paste(a,b,c, sep = "-"))
print(paste(a,b,c, sep = "", collapse = ""))
[1] "Hello How are you? "
[1] "Hello-How-are you? "
[1] "HelloHoware you? "
format() fonksiyonu
Sayılar ve stringler, format() fonksiyonu kullanılarak belirli bir stile biçimlendirilebilir.
format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))
Fonksiyonun parametreleri:
- x: vektör girişidir.
- digits: görüntülenen toplam basamak sayısıdır.
- nsmall: ondalık noktanın sağındaki minimum basamak sayısıdır.
- scientific: bilimsel gösterimi görüntülemek için DOĞRU olarak ayarlanır.
- width: başlangıçta boşluklar doldurularak görüntülenecek minimum genişliği belirtir.
- justify: dizenin sola, sağa veya merkeze gösterilmesidir.
örnek
# Total number of digits displayed. Last digit rounded off.
result <- format(23.123456789, digits = 9)
print(result)
# Display numbers in scientific notation.
result <- format(c(6, 13.14521), scientific = TRUE)
print(result)
# The minimum number of digits to the right of the decimal point.
result <- format(23.47, nsmall = 5)
print(result)
# Format treats everything as a string.
result <- format(6)
print(result)
# Numbers are padded with blank in the beginning for width.
result <- format(13.7, width = 6)
print(result)
# Left justify strings.
result <- format("Hello", width = 8, justify = "l")
print(result)
# Justfy string with center.
result <- format("Hello", width = 8, justify = "c")
print(result)
[1] "23.1234568"
[1] "6.000000e+00" "1.314521e+01"
[1] "23.47000"
[1] "6"
[1] " 13.7"
[1] "Hello "
[1] " Hello "
nchar() fonksiyonu
Bu fonksiyon, bir stringdeki boşluklar dahil olmak üzere karakter sayısını sayar. x – bir string olmak üzere:
nchar(x)
kullanılarak bu işlem gerçekleştirilebilir.
toupper()/ tolower() fonksiyonları
Bu fonksiyonlar, bir stringin karakterlerinin büyük/küçük harf durumunu değiştirir. x – üzerinde işlem yapılacak string olmak üzere:
toupper(x)
tolower(x)
fonksiyonları kullanılarak bu işlem gerçekleştirilebilir.
substring() fonksiyonu
Bu fonksiyon, bir stringin parçalarını çıkarır. x – işlem yapılacak string ifadesi, first – alınacak parçanın ilk indisi, last – alınacak parçanın son indisi olmak üzere:
substring(x,first,last)
fonksiyonları kullanılarak bu işlem gerçekleştirilebilir.
Vector
Vektörler, birden fazla elemanı tutabilen veri kümeleridir. Birden fazla elemanlı bir vektör oluşturmak için, c() fonksiyonunu kullanırız.
# Create a vector.
apple <- c('red','green',"yellow")
print(apple)
# Get the class of the vector.
print(class(apple))
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[1] "red" "green" "yellow"
[1] "character"
List
Listeler, içinde vektörler, fonksiyonlar ve başka bir liste gibi birçok farklı öğe türünü içerebilen R nesneleridir.
# Create a list.
list1 <- list(c(2,5,3),21.3,sin)
# Print the list.
print(list1)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[[1]]
[1] 2 5 3
[[2]]
[1] 21.3
[[3]]
function (x) .Primitive("sin")
Matrix
Matrisler, iki boyutlu bir dikdörtgen veri setidir. Matris fonksiyonuna bir vektör parametresi verilerek oluşturulabilir.
# Create a matrix.
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[,1] [,2] [,3]
[1,] "a" "a" "b"
[2,] "c" "b" "a"
Array
Matrisler iki boyutla sınırlıyken, diziler herhangi bir sayıda boyutta olabilir. Array fonksiyonu, gerekli sayıda boyut oluşturan bir dim niteliği alır. Aşağıdaki örnekte, her biri 3×3 matris olan iki elemanlı bir dizi oluşturulur.
# Create an array.
a <- array(c('green','yellow'),dim = c(3,3,2))
print(a)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
, , 1
[,1] [,2] [,3]
[1,] "green" "yellow" "green"
[2,] "yellow" "green" "yellow"
[3,] "green" "yellow" "green"
, , 2
[,1] [,2] [,3]
[1,] "yellow" "green" "yellow"
[2,] "green" "yellow" "green"
[3,] "yellow" "green" "yellow"
Factor
Faktörler, bir vektör kullanılarak oluşturulan R nesneleridir. Vektörü, vektördeki öğelerin farklı değerleriyle birlikte etiketler olarak saklar. Etiketler, girdi vektöründe character, numeric veya boolean vb. türde olup olmadığına bakılmaksızın her zaman karakterdir. İstatistiksel modellemede faydalıdırlar.
Faktörler, factor() fonksiyonu kullanılarak oluşturulur. nlevels fonksiyonu, seviyelerin sayısını verir.
# Create a vector.
apple_colors <- c('green','green','yellow','red','red','red','green')
# Create a factor object.
factor_apple <- factor(apple_colors)
# Print the factor.
print(factor_apple)
print(nlevels(factor_apple))
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
[1] green green yellow red red red green
Levels: green red yellow
[1] 3
Data Frame
Data Frameler, tablo halindeki veri nesneleridir. Data Frame’de bir matrisin aksine, her sütun farklı veri türleri içerebilir. İlk sütun numeric, ikinci sütun character ve üçüncü sütun logical olabilir. Eşit uzunluktaki vektörler listesidir. data.frame() fonksiyonu kullanılarak oluşturulur.
# Create the data frame.
BMI <- data.frame(
gender = c("Male", "Male","Female"),
height = c(152, 171.5, 165),
weight = c(81,93, 78),
Age = c(42,38,26)
)
print(BMI)
Kodu çalıştırdığımızda aşağıdaki çıktıyla karşılaşırız.
gender height weight Age
1 Male 152.0 81 42
2 Male 171.5 93 38
3 Female 165.0 78 26
Operatörler
Operatör, belirli matematiksel veya mantıksal işlemleri yapılmasını sağlayan bir semboldür. R dili, yerleşik operatörler açısından zengindir. Operatörleri beş sınıfa ayırabiliriz:
- Aritmetik Operatörler
- İlişkisel Operatörler
- Mantıksal Operatörler
- Atama Operatörleri
- Diğer Operatörler
Aritmetik Operatörler
+
İki vektörü toplamak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v+t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 10.0 8.5 10.0
–
Birinci vektörden ikincisini çıkarmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v-t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] -6.0 2.5 2.0
*
İki vektörü çarpmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v*t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 16.0 16.5 24.0
/
İlk vektörü ikincisine bölmek için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v/t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 0.250000 1.833333 1.500000
%%
İlk vektörün ikincisine bölümünden kalanı bulmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v%%t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 2.0 2.5 2.0
%/%
İlk vektörün ikincisine bölümünün tam sonucunu bulmak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v%/%t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 0 1 1
^
Üs almak için kullanılır.
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v^t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 256.000 166.375 1296.000
İlişkisel Operatörler
>
Büyüktür operatörü. İlk ifade ikincisinden büyükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v>t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE TRUE FALSE FALSE
<
Küçüktür operatörü. İlk ifade ikincisinden küçükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v < t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE FALSE TRUE FALSE
==
Eşitlik Operatörü. Verilen iki ifade eşitse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v==t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE FALSE FALSE TRUE
<=
Küçük eşittir operatörü. İlk ifade ikincisine eşit veya ikincisinden küçükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v<=t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE FALSE TRUE TRUE
>=
Büyük eşittir operatörü. İlk ifade ikincisine eşit veya ikincisinden büyükse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v>=t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE TRUE FALSE TRUE
!=
Değil eşit Operatörü. Verilen iki ifade eşit değilse True değerini döndürür.
v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v!=t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE TRUE TRUE FALSE
Mantıksal Operatörler
&
Ve operatörü. ilk vektör ve ikinci vektörde karşılık gelen elemanların her biri için değer döndürür.
v <- c(3,1,TRUE,2+3i)
t <- c(4,1,FALSE,2+3i)
print(v&t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE TRUE FALSE TRUE
|
Veya operatörü. ilk vektör ve ikinci vektörde karşılık gelen elemanların her biri için değer döndürür.
v <- c(3,0,TRUE,2+2i)
t <- c(4,0,FALSE,2+3i)
print(v|t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE FALSE TRUE TRUE
&&
Ve operatörü. ilk ve ikinci vektörü kıyaslar ve tek bir değer döndürür.
v <- c(3,0,TRUE,2+2i)
t <- c(1,3,TRUE,2+3i)
print(v&&t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] TRUE
||
Veya operatörü. ilk ve ikinci vektörü kıyaslar ve tek bir değer döndürür.
v <- c(0,0,TRUE,2+2i)
t <- c(0,3,TRUE,2+3i)
print(v||t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE
!
Değil operatörü. Vektörde her elmanın ters değerini döndürür.
v <- c(3,0,TRUE,2+2i)
print(!v)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] FALSE TRUE FALSE FALSE
Atama Operatörleri
=
Genel atama operatörüdür.
v3 = c(3,1,TRUE,2+3i)
print(v3)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
<- <<-
Sola atama operatörü
v1 <- c(3,1,TRUE,2+3i)
v2 <<- c(3,1,TRUE,2+3i)
print(v1)
print(v2)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
-> ->>
Sağa atama operatörü
c(3,1,TRUE,2+3i) -> v1
c(3,1,TRUE,2+3i) ->> v2
print(v1)
print(v2)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
Diğer Operatörler
:
Kolon Operatörü. Bir vektör için sırayla bir dizi sayı oluşturur.
v <- 2:8
print(v)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 2 3 4 5 6 7 8
%in%
Bu operatör, bir elemanın bir vektöre ait olup olmadığını belirlemek için kullanılır.
v1 <- 8
v2 <- 12
t <- 1:10
print(v1 %in% t)
print(v2 %in% t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
%*%
Bu operatör, bir matrisi devrik ile çarpmak için kullanılır.
M = matrix( c(2,6,5,1,10,4), nrow=2,ncol=3,byrow =
TRUE)
t = M %*% t(M)
print(t)
Kod çalıştırıldığında aşağıdaki çıktıyı verir.
[,1] [,2]
[1,] 65 82
[2,] 82 117
Koşul İfadeleri
Koşul yapıları, programcının bir veya daha fazla koşul altında programın nasıl seyredeceğini belirlemesini sağlar.
İf ifadesi
Bir if ifadesi, bir veya daha fazla ifadenin izlediği bir mantıksal ifadeden oluşur.
R’de bir if ifadesi oluşturmak için temel sözdizimi şöyledir:
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
}
Örnek
x <- c("what","is","truth")
if("Truth" %in% x){
print("Truth is found")
} else {
print("Truth is not found")
}
[1] "Truth is not found"
if ….. else ifadesi
Bir if ifadesini, mantıksal ifadesi yanlış olduğunda yürütülen isteğe bağlı bir else ifadesi izleyebilir.
R’de if…else ifadesi oluşturmak için temel sözdizimi şöyledir:
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
} else {
// statement(s) will execute if the boolean expression is false.
}
Örnek
x <- c("what","is","truth")
if("Truth" %in% x){
print("Truth is found")
} else {
print("Truth is not found")
}
[1] "Truth is not found"
switch ifadesi
Bir switch ifadesi, bir değişkenin bir değerler listesine göre eşitlik açısından test edilmesini sağlar. Her bir değere durum adı verilir ve açılan değişken her durum için kontrol edilir.
R’de bir switch ifadesi oluşturmak için temel sözdizimi şöyledir:
switch(expression, case1, case2, case3....)
Örnek
x <- switch(
3,
"first",
"second",
"third",
"fourth"
)
print(x)
[1] "third"
Döngüler
Bir kod bloğunu birkaç kez çalıştırmanız gerektiğinde kullanılan ifadedir.
Programlama dillerinin çoğunda bir döngü ifadesinin genel biçimi aşağıdadır:
Repeat Döngüsü
Repeat döngüsü, bir durdurma koşulu ile karşılanana kadar aynı kodu tekrar tekrar yürütür.
R’da bir repeat döngüsü oluşturmak için temel sözdizimi şöyledir:
repeat {
commands
if(condition){
break
}
}
örnek
v <- c("Hello","loop")
cnt <- 2
repeat{
print(v)
cnt <- cnt+1
if(cnt > 5){
break
}
}
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
While Döngüsü
while döngüsü, bir durdurma koşulu sağlanana kadar aynı kodu tekrar tekrar yürütür.
R’da bir while döngüsü oluşturmak için temel sözdizimi şöyledir:
while (test_expression) {
statement
}
örnek
v <- c("Hello","while loop")
cnt <- 2
while (cnt < 7){
print(v)
cnt = cnt + 1
}
[1] "Hello" "while loop"
[1] "Hello" "while loop"
[1] "Hello" "while loop"
[1] "Hello" "while loop"
[1] "Hello" "while loop"
For Döngüsü
For döngüsü, belirli sayıda yürütmesi gereken bir döngüyü verimli bir şekilde yazmanıza olanak tanıyan bir döngü kontrol yapısıdır.
R’da bir for döngüsü ifadesi oluşturmak için temel sözdizimi şöyledir:
for (value in vector) {
statements
}
örnek
v <- LETTERS[1:4]
for ( i in v) {
print(i)
}
[1] "A"
[1] "B"
[1] "C"
[1] "D
Döngü Kontrol İfadeleri
Döngü kontrol ifadeleri, yürütmenin normal seyrini değiştiren ifadelerdir. Bunlar break ve next deyimleridir.
Break ifadesi
R programlama dilindeki break ifadesi aşağıdaki iki kullanıma sahiptir:
- Bir döngü içinde break ifadesi ile karşılaşıldığında, döngü hemen
sonlandırılır ve program yürütmeye döngüyü izleyen bir sonraki ifadeden devam eder. - Switch deyiminde bir durumu sonlandırmak için kullanılır.
örnek
v <- c("Hello","loop")
cnt <- 2
repeat{
print(v)
cnt <- cnt+1
if(cnt > 5){
break
}
}
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop
Next ifadesi
R programlama dilindeki next ifadesi, bir döngünün mevcut yinelemesini sonlandırmadan sonraki yinelemeye atlamak istediğimizde kullanışlıdır. Program next ile karşılaştığında atlar ve döngünün bir sonraki yinelemesini başlatır.
örnek
v <- LETTERS[1:6]
for ( i in v){
if (i == "D"){
next
}
print(i)
}
[1] "A"
[1] "B"
[1] "C"
[1] "E"
[1] "F"
Fonksiyonlar
Fonksiyon, belirli bir görevi gerçekleştirmek için birlikte düzenlenen bir dizi ifadedir. R’in çok sayıda yerleşik fonksiyonu vardır. Bunun yanında, kullanıcı kendi fonksiyonlarını da oluşturabilir. R’da her fonksiyon bir nesnedir, bu nedenle R yorumlayıcısı, fonksiyonun eylemleri gerçekleştirmesi için gerekli olabilecek argümanlarla birlikte fonksiyonu değişkene iletebilir.
Bir R fonksiyonunun temel sözdizimi aşağıdaki gibidir:
function_name <- function(arg_1, arg_2, ...) {
Function body
}
örnek
Sırayla sayıların karelerini yazdırmak için bir fonksiyon oluşturalım.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
Oluşturduğumuz fonksiyonu çağıralım.
new.function(6)
Kod çalıştırıldığında aşağıdaki çıktıyı alırız.
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
Paketler
R paketi, R fonksiyonlarının, derlenmiş kodların ve örnek verilerin olduğu bir koleksiyonudur. Paketler, R ortamında “library” adlı bir dizinin altnda saklanırlar. R kurulumu esnasında varsayılan olarak bir paket kümesi yükler. Yapılacak projenin gereksinimlerine göre ihtiyaç duyulduğunda daha fazla paket eklenebilir. Bütün R paketleri CRAN üzerinde R Packages‘de listelenmiş şekilde bulunmaktadır.
Tüm paketlerin listesini almak için library() fonksiyonunu kullanılır.
library()
Packages in library ‘C:/Program Files/R/R-3.2.2/library’:
base The R Base Package
boot Bootstrap Functions (Originally by Angelo Canty
for S)
class Functions for Classification
cluster "Finding Groups in Data": Cluster Analysis
Extended Rousseeuw et al.
codetools Code Analysis Tools for R
compiler The R Compiler Package
datasets The R Datasets Package
foreign Read Data Stored by 'Minitab', 'S', 'SAS',
'SPSS', 'Stata', 'Systat', 'Weka', 'dBase', ...
graphics The R Graphics Package
grDevices The R Graphics Devices and Support for Colours
and Fonts
grid The Grid Graphics Package
KernSmooth Functions for Kernel Smoothing Supporting Wand
& Jones (1995)
lattice Trellis Graphics for R
MASS Support Functions and Datasets for Venables and
Ripley's MASS
Matrix Sparse and Dense Matrix Classes and Methods
methods Formal Methods and Classes
mgcv Mixed GAM Computation Vehicle with GCV/AIC/REML
Smoothness Estimation
nlme Linear and Nonlinear Mixed Effects Models
nnet Feed-Forward Neural Networks and Multinomial
Log-Linear Models
parallel Support for Parallel computation in R
rpart Recursive Partitioning and Regression Trees
spatial Functions for Kriging and Point Pattern
Analysis
splines Regression Spline Functions and Classes
stats The R Stats Package
stats4 Statistical Functions using S4 Classes
survival Survival Analysis
tcltk Tcl/Tk Interface
tools Tools for Package Development
utils The R Utils Package
R ortamında şu anda yüklü olan tüm paketleri görmek için search() fonksiyonu kullanılır.
search()
[1] ".GlobalEnv" "tools:rstudio" "package:stats" "package:graphics" "package:grDevices"
[6] "package:utils" "package:datasets" "package:methods" "Autoloads" "package:base"
Paket kurulumu
Yeni R paketleri eklemenin iki yolu vardır. Biri doğrudan CRAN üzerinden, diğeri manuel olarak kurulumdur.
Doğrudan CRAN’dan Kurulum
Aşağıdaki komut, paketleri doğrudan CRAN sayfasından alır ve paketi R ortamına kurar.
install.packages("Package Name")
# Install the package named "XML".
install.packages("XML")
Manuel Kurulum
Manuel kurulum, gerekli paketin zip dosyası halinde indirilip R ortamında kurulumunu kapsar. Bunun için aşağıdaki komutu çalıştırabilirsiniz.
install.packages(file_name_with_path, repos = NULL, type = "source")
# Install the package named "XML"
install.packages("E:/XML_3.98-1.3.zip", repos = NULL, type = "source")
Paketi Ekleme
Bir paket kodda kullanılmadan önce mevcut R ortamına eklenmelidir. Bunun için library() fonksiyonu kullanılır.
library("package Name", lib.loc = "path to library")
Dosya İşlemleri
R’da, R ortamının dışında depolanan dosyalardan veri okuyabiliriz. Ayrıca, işletim sistemi tarafından saklanacak ve erişilecek dosyalara veri yazabiliriz. R, csv, excel, xml vb. gibi çeşitli dosya biçimlerini okuyabilir ve yazabilir.
CSV Dosyaları
R ortamında, bir csv dosyasından veri okuyabilir ve bir csv dosyasına veri yazabiliriz. Dosya, R’ın okuyabilmesi için mevcut çalışma dizininde bulunmalıdır. Bunun yanında, kendi dizinimizi de ayarlayabilir ve oradan dosyaları okuyabiliriz.
getwd() fonksiyonunu kullanarak R mevcut çalışma dizinini kontrol edebilirsiniz. Ayrıca setwd() fonksiyonunu kullanarak yeni bir çalışma dizini ayarlayabilirsiniz.
# Get and print current working directory.
print(getwd())
# Set current working directory.
setwd("/web/com")
# Get and print current working directory.
print(getwd())
[1] "/web/com/1441086124_2016"
[1] "/web/com"
CSV Dosyasını Okuma
Mevcut çalışma dizininizde bulunan bir CSV dosyasını okumak için read.csv() fonksiyonunu kullanabiliriz. Bu fonksiyon bize bir data frame döndürür.
data <- read.csv("input.csv")
print(data)
id, name, salary, start_date, dept
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
CSV Dosyasına Yazma
R, data frame’den csv dosyası oluşturabilir. write.csv() fonksiyonu, csv dosyasını oluşturmak için kullanılır. Bu dosya çalışma dizininde oluşturulur.
# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
# Write filtered data into a new file.
write.csv(retval,"output.csv")
newdata <- read.csv("output.csv")
print(newdata)
X id name salary start_date dept
1 3 3 Michelle 611.00 2014-11-15 IT
2 4 4 Ryan 729.00 2014-05-11 HR
3 5 NA Gary 843.25 2015-03-27 Finance
4 8 8 Guru 722.50 2014-06-17 Finance
Excel Dosyaları
Microsoft Excel, verileri .xls veya .xlsx biçiminde depolayan en yaygın kullanılan elektronik tablo programıdır. R, bazı Excel’e özgü paketleri kullanarak bu dosyalardan doğrudan okuyabilir ve yazabilir.
“xlsx” paketini kurmak için R konsolunda aşağıdaki komutu kullanabilirsiniz. Bu paketin bağımlı olduğu bazı ek paketlerin yüklenmesini isteyebilir. Ek paketleri kurmak için gerekli paket adıyla aynı komutu izleyin.
install.packages("xlsx")
Excel Dosyasını Okuma
R ortamında veri okumak için, read.xlsx() fonksiyonu kullanılır. Sonuç, R ortamında bir data frame olarak saklanır.
# Read the first worksheet in the file input.xlsx.
data <- read.xlsx("input.xlsx", sheetIndex = 1)
print(data)
id, name, salary, start_date, dept
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
Excel Dosyasına Yazma
R ortamında, mevcut bir excel dosyasına yazmak için write.xlsx() fonksiyonu kullanılır . Veriler matris veya data frame biçiminde iletilir.
df
write.xlsx(df, file = "mydata.xlsx")
Bınary Dosyalar
İkili dosya, yalnızca bit ve bayt (0’lar ve 1’ler) biçiminde depolanan bilgileri içeren bir dosyadır. İçindeki baytlar, yazdırılamayan birçok başka karakter içeren karakterlere ve sembollere çevrildiği için insan tarafından okunamazlar. Herhangi bir metin düzenleyiciyi kullanarak ikili bir dosyayı okumaya çalışmak, Ø ve ð gibi karakterleri gösterecektir.
İkili dosyanın kullanılabilir olması için belirli programlar tarafından okunması gerekir. Bazen, diğer programlar tarafından oluşturulan verilerin R tarafından ikili dosya olarak işlenmesi gerekir. Ayrıca R, diğer programlarla paylaşılabilen ikili dosyalar oluşturmak için gereklidir.
R’ın ikili dosyalar oluşturmak ve okumak için writeBin() ve readBin() olmak üzere iki fonksiyonu vardır.
writeBin(object, con)
readBin(con, what, n )
Kullanılan parametreler:
- con: ikili dosyayı okumak veya yazmak için bağlantı nesnesidir.
- object: yazılacak ikili dosyadır.
- what: okunacak baytları temsil eden karakterdir.
- n: ikili dosyadan okunacak bayt sayısıdır.
İkili Dosyaya Yazma
“mtcars” data frame’ini bir csv dosyası olarak okuyup ikili dosya olarak yazalım.
# Read the "mtcars" data frame as a csv file and store only the columns
"cyl", "am" and "gear".
write.table(mtcars, file = "mtcars.csv",row.names = FALSE, na = "",
col.names = TRUE, sep = ",")
# Store 5 records from the csv file as a new data frame.
new.mtcars <- read.table("mtcars.csv",sep = ",",header = TRUE,nrows = 5)
# Create a connection object to write the binary file using mode "wb".
write.filename = file("/web/com/binmtcars.dat", "wb")
# Write the column names of the data frame to the connection object.
writeBin(colnames(new.mtcars), write.filename)
# Write the records in each of the column to the file.
writeBin(c(new.mtcars$cyl,new.mtcars$am,new.mtcars$gear), write.filename)
# Close the file for writing so that it can be read by other program.
close(write.filename)
İkili Dosyadan Okuma
Yukarıda oluşturulan ikili dosya, tüm verileri bayt olarak depolar. Bu yüzden sütun değerlerinin yanı sıra sütun adlarının da uygun değerlerini seçerek okuyalım.
# Create a connection object to read the file in binary mode using "rb".
read.filename <- file("/web/com/binmtcars.dat", "rb")
# First read the column names. n = 3 as we have 3 columns.
column.names <- readBin(read.filename, character(), n = 3)
# Next read the column values. n = 18 as we have 3 column names and 15 values.
read.filename <- file("/web/com/binmtcars.dat", "rb")
bindata <- readBin(read.filename, integer(), n = 18)
# Print the data.
print(bindata)
# Read the values from 4th byte to 8th byte which represents "cyl".
cyldata = bindata[4:8]
print(cyldata)
# Read the values form 9th byte to 13th byte which represents "am".
amdata = bindata[9:13]
print(amdata)
# Read the values form 9th byte to 13th byte which represents "gear".
geardata = bindata[14:18]
print(geardata)
# Combine all the read values to a dat frame.
finaldata = cbind(cyldata, amdata, geardata)
colnames(finaldata) = column.names
XML Dosyaları
XML, Genişletilebilir İşaretleme Dili anlamına gelir. HTML’ye benzer şekilde, biçimlendirme etiketleri içerir. Ancak, xml’de biçimlendirme etiketleri, dosyanın içerdiği verilerin anlamını tanımlar.
“XML” paketini kullanarak bir xml dosyasını R’de okuyabilirsiniz. Bu paket aşağıdaki komut kullanılarak kurulabilir.
install.packages("XML")
xml dosyası, xmlParse() fonksiyonu kullanılarak R tarafından okunur. R’da bir liste olarak saklanır.
örnek
# Load the package required to read XML files.
library("XML")
# Also load the other required package.
library("methods")
# Give the input file name to the function.
result <- xmlParse(file = "input.xml")
JSON Dosyaları
JSON dosyası, verileri insan tarafından okunabilir biçimde metin olarak depolar. R, rjson paketini kullanarak JSON dosyalarını okuyabilir.
R konsolunda, rjson paketini kurmak için aşağıdaki komutu kullanabilirsiniz.
install.packages("rjson")
JSON dosyası, fromJSON() fonksiyonu kullanılarak R tarafından okunur ve bir liste olarak saklanır.
örnek
# Load the package required to read JSON files.
library("rjson")
# Give the input file name to the function.
result <- fromJSON(file = "input.json")
Web Verileri
Birçok web sitesi, kullanıcılar için önemli veriler barındırır. Örneğin, Dünya Sağlık Örgütü (WHO), sağlık ve tıbbi bilgiler hakkında CSV, txt ve XML dosyaları biçiminde raporlar sağlar. R programlarını kullanarak, bu tür web sitelerinden programlı olarak belirli verileri çıkarabiliriz. Web’den veri toplamak için kullanılan R’deki bazı paketler – “RCurl”, XML” ve “stringr”. Bunlar URL’lere bağlanmak, dosyalar için gerekli bağlantıları belirlemek ve bunları indirmek için kullanılır.
URL’leri ve dosyalara olan bağlantıları işlemek için aşağıdaki paketler gereklidir. R Ortamınızda yoksa, aşağıdaki komutları kullanarak kurabilirsiniz.
install.packages("RCurl")
install.packages("XML")
install.packages("stringr")
install.packages("plyr")
Dosyaların URL’lerini toplamak için getHTMLLinks() fonksiyonunu kullanacağız. Ardından dosyaları yerel sisteme kaydetmek için download.file() fonksiyonunu kullanacağız. Birden fazla dosya için aynı kodu tekrar tekrar uygulayacağımız için birden çok kez çağrılacak bir fonksiyon oluşturacağız. Dosya adları, bu fonksiyona bir R listesi nesnesi biçiminde parametreler olarak iletilir.
örnek
# Read the URL.
url <- "http://www.geos.ed.ac.uk/~weather/jcmb_ws/"
# Gather the html links present in the webpage.
links <- getHTMLLinks(url)
# Identify only the links which point to the JCMB 2015 files.
filenames <- links[str_detect(links, "JCMB_2015")]
# Store the file names as a list.
filenames_list <- as.list(filenames)
# Create a function to download the files by passing the URL and filename list.
downloadcsv <- function (mainurl,filename) {
filedetails <- str_c(mainurl,filename)
download.file(filedetails,filename)
}
# Now apply the l_ply function and save the files into the current R working directory.
l_ply(filenames,downloadcsv,mainurl = "http://www.geos.ed.ac.uk/~weather/jcmb_ws/")
Veri Tabanları
Veriler, ilişkisel veritabanı sistemlerinde normalleştirilmiş bir biçimde saklanır. R, MySql, Oracle, Sql server vb. gibi birçok ilişkisel veritabanına kolayca bağlanabilir ve onlardan data freame olarak kayıtları alabilir. Veriler R ortamına çekildiğinde, normal bir R veri seti haline gelir, paketler ve fonksiyonlar kullanılarak analiz edilebilir.
Bu kısımda, R’a bağlanmak için referans veritabanı olarak MySql’i kullanacağız.
R, MySql veritabanı ile bağlantı sağlayan “RMySQL” adlı bir pakete sahiptir. Bu paketi aşağıdaki komutu kullanarak R ortamına kurabilirsiniz.
install.packages("RMySQL")
MySql’e Bağlanma
Paket yüklendikten sonra, veritabanına bağlanmak için R’da bir bağlantı nesnesi oluşturuyoruz. Parametre olarak kullanıcı adı, şifre, veritabanı adı ve ana bilgisayar adını veriyouz.
# Create a connection Object to MySQL database.
# We will connect to the sampel database named "sakila" that comes with MySql installation.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila',
host = 'localhost')
# List the tables available in this database.
dbListTables(mysqlconnection)
[1] "actor" "actor_info"
[3] "address" "category"
[5] "city" "country"
[7] "customer" "customer_list"
[9] "film" "film_actor"
[11] "film_category" "film_list"
[13] "film_text" "inventory"
[15] "language" "nicer_but_slower_film_list"
[17] "payment" "rental"
[19] "sales_by_film_category" "sales_by_store"
[21] "staff" "staff_list"
[23] "store"
SQL sorgusu gönderme
MySql’deki veritabanı tablolarını dbSendQuery() fonksiyonunu kullanarak sorgulayabiliriz. Sorgu MySql’de yürütülür ve sonuç kümesi fetch() fonksiyonu kullanılarak döndürülür. Son olarak, R’da bir data frame olarak saklanır.
# Query the "actor" tables to get all the rows.
result = dbSendQuery(mysqlconnection, "select * from actor")
# Store the result in a R data frame object. n = 5 is used to fetch first 5 rows.
data.frame = fetch(result, n = 5)
print(data.fame)
actor_id first_name last_name last_update
1 1 PENELOPE GUINESS 2006-02-15 04:34:33
2 2 NICK WAHLBERG 2006-02-15 04:34:33
3 3 ED CHASE 2006-02-15 04:34:33
4 4 JENNIFER DAVIS 2006-02-15 04:34:33
5 5 JOHNNY LOLLOBRIGIDA 2006-02-15 04:34:33
Veri Biçimlendirme
R’da veri biçimlendirme, verileri satır-sütunlar halinde düzenleme, şeklini değiştirmekle ilgilidir. Bu işlemler genelde data frame üzerinde yapılır. Bir data frame’in satırlarından ve sütunlarından veri çekmek oldukça kolaydır.
R’ın bir data frame’deki satırları sütunlara bölmek, birleştirmek ve değiştirmek için birçok fonksiyonu vardır.
Data Frame’de Satırları ve Sütunları Birleştirme
cbind() fonksiyonunu kullanarak bir data frame oluşturmak için birden çok vektörü birleştirebiliriz. Ayrıca, rbind() fonksiyonunu kullanarak iki data frame’i birleştirebiliriz.
# Create vector objects.
city <- c("Tampa","Seattle","Hartford","Denver")
state <- c("FL","WA","CT","CO")
zipcode <- c(33602,98104,06161,80294)
# Combine above three vectors into one data frame.
addresses <- cbind(city,state,zipcode)
# Print a header.
cat("# # # # The First data frame\n")
# Print the data frame.
print(addresses)
# Create another data frame with similar columns
new.address <- data.frame(
city = c("Lowry","Charlotte"),
state = c("CO","FL"),
zipcode = c("80230","33949"),
stringsAsFactors = FALSE
)
# Print a header.
cat("# # # The Second data frame\n")
# Print the data frame.
print(new.address)
# Combine rows form both the data frames.
all.addresses <- rbind(addresses,new.address)
# Print a header.
cat("# # # The combined data frame\n")
# Print the result.
print(all.addresses)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
# # # # The First data frame
city state zipcode
[1,] "Tampa" "FL" "33602"
[2,] "Seattle" "WA" "98104"
[3,] "Hartford" "CT" "6161"
[4,] "Denver" "CO" "80294"
# # # The Second data frame
city state zipcode
1 Lowry CO 80230
2 Charlotte FL 33949
# # # The combined data frame
city state zipcode
1 Tampa FL 33602
2 Seattle WA 98104
3 Hartford CT 6161
4 Denver CO 80294
5 Lowry CO 80230
6 Charlotte FL 33949
Data Frameleri Birleştirme
merge() fonksiyonunu kullanarak iki data frame’i birleştirebiliriz. Birleştirmenin gerçekleştiği data framelerin sütun adları aynı olmalıdır.
Aşağıdaki örnekte, “MASS” kitaplığında bulunan Pima veri kümelerini ele alıyoruz.
library(MASS)
merged.Pima <- merge(x = Pima.te, y = Pima.tr,
by.x = c("bp", "bmi"),
by.y = c("bp", "bmi")
)
print(merged.Pima)
nrow(merged.Pima)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
bp bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y
1 60 33.8 1 117 23 0.466 27 No 2 125 20 0.088
2 64 29.7 2 75 24 0.370 33 No 2 100 23 0.368
3 64 31.2 5 189 33 0.583 29 Yes 3 158 13 0.295
4 64 33.2 4 117 27 0.230 24 No 1 96 27 0.289
5 66 38.1 3 115 39 0.150 28 No 1 114 36 0.289
6 68 38.5 2 100 25 0.324 26 No 7 129 49 0.439
7 70 27.4 1 116 28 0.204 21 No 0 124 20 0.254
8 70 33.1 4 91 32 0.446 22 No 9 123 44 0.374
9 70 35.4 9 124 33 0.282 34 No 6 134 23 0.542
10 72 25.6 1 157 21 0.123 24 No 4 99 17 0.294
11 72 37.7 5 95 33 0.370 27 No 6 103 32 0.324
12 74 25.9 9 134 33 0.460 81 No 8 126 38 0.162
13 74 25.9 1 95 21 0.673 36 No 8 126 38 0.162
14 78 27.6 5 88 30 0.258 37 No 6 125 31 0.565
15 78 27.6 10 122 31 0.512 45 No 6 125 31 0.565
16 78 39.4 2 112 50 0.175 24 No 4 112 40 0.236
17 88 34.5 1 117 24 0.403 40 Yes 4 127 11 0.598
age.y type.y
1 31 No
2 21 No
3 24 No
4 21 No
5 21 No
6 43 Yes
7 36 Yes
8 40 No
9 29 Yes
10 28 No
11 55 No
12 39 No
13 39 No
14 49 Yes
15 49 Yes
16 38 No
17 28 No
[1] 17
Melting ve Casting
R programlamanın en ilginç yönlerinden biri, istenen veri şeklini elde etmek için verilerin şeklini birden fazla adımda değiştirmekle ilgilidir. Bunu yapmak için kullanılan fonksiyonlar melt() ve cast()’dir. Bunun için “MASS” adlı kütüphanede bulunan ships adlı veri setini ele alıyoruz.
library(MASS)
print(ships)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
type year period service incidents
1 A 60 60 127 0
2 A 60 75 63 0
3 A 65 60 1095 3
4 A 65 75 1095 4
5 A 70 60 1512 6
.............
.............
8 A 75 75 2244 11
9 B 60 60 44882 39
10 B 60 75 17176 29
11 B 65 60 28609 58
............
............
17 C 60 60 1179 1
18 C 60 75 552 1
19 C 65 60 781 0
............
............
Şimdi verileri düzenlemek için melt ediyoruz, tür ve yıl dışındaki tüm sütunları birden çok satıra dönüştürüyoruz.
molten.ships <- melt(ships, id = c("type","year"))
print(molten.ships)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
type year variable value
1 A 60 period 60
2 A 60 period 75
3 A 65 period 60
4 A 65 period 75
............
............
9 B 60 period 60
10 B 60 period 75
11 B 65 period 60
12 B 65 period 75
13 B 70 period 60
...........
...........
41 A 60 service 127
42 A 60 service 63
43 A 65 service 1095
...........
...........
70 D 70 service 1208
71 D 75 service 0
72 D 75 service 2051
73 E 60 service 45
74 E 60 service 0
75 E 65 service 789
...........
...........
101 C 70 incidents 6
102 C 70 incidents 2
103 C 75 incidents 0
104 C 75 incidents 1
105 D 60 incidents 0
106 D 60 incidents 0
...........
...........
Melt edilmiş verileri, her yıl için her gemi tipinin toplamının oluşturulduğu yeni bir forma dönüştürebilir, cast edebiliriz.
recasted.ship <- cast(molten.ships, type+year~variable,sum)
print(recasted.ship)
Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu verir.
type year period service incidents
1 A 60 135 190 0
2 A 65 135 2190 7
3 A 70 135 4865 24
4 A 75 135 2244 11
5 B 60 135 62058 68
6 B 65 135 48979 111
7 B 70 135 20163 56
8 B 75 135 7117 18
9 C 60 135 1731 2
10 C 65 135 1457 1
11 C 70 135 2731 8
12 C 75 135 274 1
13 D 60 135 356 0
14 D 65 135 480 0
15 D 70 135 1557 13
16 D 75 135 2051 4
17 E 60 135 45 0
18 E 65 135 1226 14
19 E 70 135 3318 17
20 E 75 135 542 1
Moderatör tarafında düzenlendi: