R is a scripting language for statistical data manipulation and analysis. It was inspired by, and is mostly compatible with, the statistical language S developed by AT&T. The name S, for statistics, was an allusion to another programming language with a one-letter name developed at AT&T—the famous C language. S later was sold to a small firm, which added a graphical user interface (GUI) and named the result S-Plus. (Matloff, 2011)

Input

Selain bahasa skrip, R disebut juga bahasa interpreter dimana saat pengguna memasukkan suatu input pada konsol R atau menjalankan sebuah skrip R, mesin interpreter R akan mengeksekusi perintah tersebut. R juga bersifat interaktif dimana setiap perintah yang ditulis dapat langsung dievaluasi kemudian hasilnya dapat langsung disajikan pada layar.

Sebagai contoh, dengan memasukkan perintah perkalian berikut pada konsol R:

10*2

Ketika kita menekan tombol enter, R akan mengeksekusi dan menampilkan hasilnya

## [1] 20

Konsol R diawali tanda >, yang menunjukkan bahwa R siap menerima perintah baru. Jika perintah dimasukkan tidak lengkap, maka tanda tersebut akan berubah menjadi tanda +.

Semua perintah atau teks yang ditulis setelah tanda # tidak akan dieksekusi oleh R. Biasanya ini berguna untuk memberikan komentar atau catatan

# perkalian 10 x 2
10*2
## [1] 20

Penugasan

Dalam R, sangat disarankan untuk menggunakan tanda <- sebagai operator assigment. obj <- expr berarti masukkan nilai hasil dari operasi di sisi kanan (expr) ke dalam objek di sisi kiri (obj). Misalnya:

x <- 20

Artinya kita memasukkan nilai 20 ke dalam objek x. Contoh lain

y <- 100 + 50

Artinya kita memasukkan hasi dari operasi 100 + 50 ke dalam objek y. Selain dengan operator <-, kita juga dapat menggunakan operator = atau ->.

Untuk menampilkan objek dalam layar, cukup tuliskan nama objek lalu enter.

x
## [1] 20
y
## [1] 150

Atau bisa juga dengan perintah print()

print(x)
## [1] 20
print(y)
## [1] 150

Penamaan Objek

Segala hal dalam R dipandang sebagai objek, misalnya data, fungsi, dan lain-lain. Objek-objek tersebut dapat “diberi nama” dengan apapun yang kita mau. Pada contoh sebelumnya, kita mempunyai objek dengan nama x dan y. Meskipun demikian, ada beberapa aturan penamaan objek dalam R yang harus dipenuhi, yaitu:

  • Menggunakan kombinasi alfabet (a-z, A-Z), angka (0-9), titik (.) atau underscore (_),
  • Hanya dapat diawali oleh alfabet, titik atau underscore dan tidak boleh diawali dengan angka,
  • Tidak mengandung spasi, tab atau karakter khusus seperti !, @, #,
  • Sebaiknya tidak menggunakan penamaan atau nilai yang sudah digunakan oleh R, seperti c, df, rnorm dan lainnya.

Ketika membuat sebuah program dalam R (atau bahasa pemrograman apapun), disarankan untuk menggunakan penamaan yang lazim dan konsisten, seperti:

  • alllowercase: misal adjustcolor
  • period.separated: misal plot.new
  • underscore_separated: misal numeric_version
  • lowerCamelCase: misal addTaskCallback
  • UpperCamelCase: misal SignatureMethod

Note: meskipun diizinkan, penggunaan underscore sebaiknya dihindari karena sedikit sekali yang menerapkannya pada R.

R bersifat case-sensitive baik dalam penamaan objek maupun isi dari objek tersebut. Huruf kecil dan huruf besar menunjukkan hal berbeda. ABC berbeda dengan abc, berbeda pula dengan Abc maupun AbC dan seterusnya.

Folder Kerja

Sesuai namanya, working directory adalah folder atau directory aktif tempat sesi R tersebut sedang berjalan. Untuk mengetahui folder kerja, bisa menggunakan perintah

getwd()
## [1] "E:/Asistensi/STA1561-ganjil-23/prak-paralel-selasa"

Untuk mengganti folder kerja, dapat menggunakan perintah

setwd("D:/Learning/R")

Perhatikan path dipisahkan oleh tanda /, atau bisa juga dengan tanda \\.

setwd("D:\\Learning\\R")

Untuk mengakses file yang berada dalam folder kerja, cukup menuliskan nama filenya saja, misalnya

read.csv("dataku.csv")

Tipe Objek Data

R mempunyai beberapa jenis mode objek dasar, atau disebut sebagai “atomic” class dari objek, yaitu:

  • character, misalnya "ipb", "mahasiswa", "stastika"

  • numeric, misalnya 12, 2.3, 1.2e-2

  • complex, misalnya 1.2e6+2i

  • logical, misalnya T, F, TRUE, FALSE

Objek Angka:

Angka dalam R umumnya diperlakukan sebagai objek numerik (atau angka riil). Artinya, sebuah angka yang terlihat sebagai “1” atau “2”, sebetulnya direpresentasikan oleh R sebagai objek numerik, seperti “1.00” atau “2.00”. Apabila kita menginginkan objek integer, kita harus menambahkan akhiran L. Misal untuk mendapatkan integer 1 harus ditulis 1L.

Struktur Data

Terdapat beberapa tipe objek data standar dalam R, yaitu:

  • Vector: tipe sederhana dari objek data dalam R di mana setiap elemennya mempunyai mode yang sama

  • Factor: vektor dengan anggota/elemennya berupa kategori

  • Matrix: vektor yang berdimensi dua yaitu baris dan kolom

  • Array: tipe objek yang dapat menyimpan data lebih dari dua dimensi

  • Data frame: objek yang menyimpan data dalam bentuk tabular (baris dan kolom)

  • List: vektor dengan anggota/elemennya berupa objek. Mode dari elemen list boleh berbeda-beda

Vector

Vector merupakan objek data paling sederhana dalam R dan digunakan oleh hampir semua fungsi aritmatik. Dalam vector, mode anggota/elemen adalah sama. Ada beberapa cara membuat vector, di antaranya:

Membuat vector

Banyak cara membuat vector. Beberapa di antaranya adalah menggunakan perintah c(), seq() dan rep().

Fungsi c()

Sebuah vektor dapat dibuat dengan fungsi c() di mana setiap elemen dipisahkan oleh tanda koma. Misalnya.

a <- c(0.5, 0.6)
a
## [1] 0.5 0.6

Contoh lain

b <- c(TRUE, FALSE)    ## logical
c <- c(T, F)           ## logical
d <- c("a", "b", "c")  ## character
e <- 9:29              ## integer
f <- c(1+0i, 2+4i)     ## complex

Kadang kita memasukkan objek dengan mode berbeda kedalam suatu vektor, baik karena disengaja maupun tidak. Apa yang akan terjadi?

a <- c(1.7, "a")  # character
a
## [1] "1.7" "a"
b <- c(TRUE, 2)   # numeric
b
## [1] 1 2
c <- c("a", TRUE) # character
c
## [1] "a"    "TRUE"

Untuk kasus seperti itu, R akan mengkonversi data ke dalam mode yang paling sesuai. Pada contoh pertama, ada dua kemungkinan mode yaitu numerik dan character. Karena mengkonversi yang memungkinkan adalah konversi numerik ke karakter (bukan sebaliknya), maka akan mengkonversi 1.7 menjadi character "1.7".

Fungsi seq()

Fungsi seq() digunakan untuk membuat vector yang berisi angka berurutan. Misalnya

Vector 1 sampai dengan 10, dengan incremental 1

x <- seq(from = 1, to = 10)
x
##  [1]  1  2  3  4  5  6  7  8  9 10

Atau bisa ditulis dengan perintah berikut

x <- 1:10
x
##  [1]  1  2  3  4  5  6  7  8  9 10

Vector 1 sampai dengan 10, dengan incremental 2

y <- seq(from = 1, to = 10, by = 2)
y
## [1] 1 3 5 7 9
Fungsi rep()

Fungsi rep() digunakan untuk membuat vector dengan mengulang nilai yang diinginkan, misalnya

x <- rep(1, 10)
x
##  [1] 1 1 1 1 1 1 1 1 1 1

Mengakses element dari vector

Element pada vector dapat diakses melalui indeksnya dengan menggunakan operator [ ]. Dua contoh berikut mengambil elemen pertama serta elemen ke-2 dan ke-3 dari vector

x <- c(10, 20, 30, 40, 50)
x[1]
## [1] 10
x[c(2,3)]
## [1] 20 30

Fungsi lain

Fungsi lain sering digunakan dalam vector adalah length() dan class(). Fungsi length() berguna untuk mengetahui pajang atau banyaknye elemen dari suatu vector sedangkan class() untuk mengetahi class atau mode dari suatu vector.

Factor

Faktor digunakan untuk merepresentasikan data kategorik, baik terurut/ordered maupun tidak terurut/unordered. Faktor dapat dianggap sebagai vektor di mana setiap elemennya memiliki label. Objek faktor dapat dibuat dengan fungsi factor().

f <- factor(c("SD", "SMA", "SMP", "SD", "SMA", "SMP", "SD", "SMP"))
f
## [1] SD  SMA SMP SD  SMA SMP SD  SMP
## Levels: SD SMA SMP
factor(f, levels = c("SD", "SMP", "SMA"))
## [1] SD  SMA SMP SD  SMA SMP SD  SMP
## Levels: SD SMP SMA
factor(f, levels = c("SD", "SMP", "SMA"), ordered = TRUE)
## [1] SD  SMA SMP SD  SMA SMP SD  SMP
## Levels: SD < SMP < SMA
length(f)
## [1] 8
class(f)
## [1] "factor"

Matriks

Matriks merupakan vector yang berdimensi dua yaitu baris dan kolom. Matriks dapat dibuat dengan mengubah dimensi dari suatu vector.

Matriks dapat dibentuk dengan perintah matrix(). Secara default, matriks dibentuk dengan cara column-wise (byrow = FALSE), yaitu dengan mengisi kolom pertama terlebih dahulu, dari atas ke bawah, dilanjutkan kolom berikutnya.

Misalnya untuk membuat matriks berukuran 2 x 3 :

m <- matrix(1:6, nrow = 2, ncol = 3) 
m
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

Atau bisa dengan menambahkan argumen byrow = TRUE sehingga akan mengisi baris pertama terlebih dahulu, mulai dari kiri ke kanan, dilanjutknya ke baris berikutnya.

m <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE) 
m
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

Matriks dapat dibentuk secara langsung dari vector dengan cara menambahkan atribut dimensi.

m <- 1:10 
dim(m) <- c(2, 5)
m
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10

Cara lain membentuk matriks adalah dengan penggabungan kolom dengan fungsi cbind() dan penggabungan baris dengan fungsi rbind().

x <- 1:3
y <- 10:12
cbind(x, y)
##      x  y
## [1,] 1 10
## [2,] 2 11
## [3,] 3 12
rbind(x, y)
##   [,1] [,2] [,3]
## x    1    2    3
## y   10   11   12

Array

Array adalah struktur data yang dapat menampung data multidimensi. Dalam R, jika matriks hanya mempunyai dua dimensi, maka array dapat memiliki lebih dari 2 dimensi.

v1 <-  c(5, 10, 15, 20)
v2 <-  c(25, 30, 35, 40, 45, 50, 55, 60)

arr <- array(c(v1, v2), dim =c(4,4,3))

Untuk mengetahui dimensi dari suatu array, dapat menggunakan fungsi dim()

dim(arr)
## [1] 4 4 3

Dataframe

Baris dalam data frame merepresentasikan pengamatan/observasi, sedangkan kolom mereprentasikan peubah/variabel. Setiap elemen dalam kolom yang sama mempunyai mode yang sama, namun antar kolom bisa mempunyai mode yang berbeda.

Data frame dapat dibuat menggunakan fungsi data.frame():

df <- data.frame(foo = 1:4, bar = c(T, T, F, F)) 
df
df2 <- data.frame(numbers = c(10, 20, 30, 40),
                  text = c("a", "b", "c", "a"))
df2

List

List merupakan bentuk khusus dari vector yang memungkinkan elemennya bisa berupa objek dengan mode yang berbeda-beda. Elemen-elemen dari list dapat berupa vector, matriks, array, list atau gabungan beberapa struktur data.

List dapat dibuat dengan menggunakan fungsi list()

s <- "A" 
v <- c(1:20)
m <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE) 
df <- data.frame(numbers = c(10, 20, 30, 40),
                  text = c("a", "b", "c", "a"))

l <- list(s, v, m, df)
l
## [[1]]
## [1] "A"
## 
## [[2]]
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
## 
## [[3]]
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## 
## [[4]]
##   numbers text
## 1      10    a
## 2      20    b
## 3      30    c
## 4      40    a

Missing value

Ada beberapa missing value dalam R, yaitu:

  • NULL

    Sebuah objek yang diperoleh ketika suatu ekspresi atau fungsi menghasilkan nilai yang tidak terdefinisi (undefined value)

  • NA

    Singkatan dari “Not Available”. Merupakan sebuah logical untuk mengindikasikan missing value.

  • NaN

    Singkatan dari “Not a Number”. Merupakan sebuah logical untuk angka dan merupakan gambaran imajiner dari nilai nilai yang sangat kompleks.

  • Inf / -Inf

    Singkatan dari infinity atau tidak hingga. Merupakan angka yang sangat besar atau sangat kecil.

x <- c(1, 2, NA, 10, 3)  
is.na(x)  
## [1] FALSE FALSE  TRUE FALSE FALSE
is.nan(x) 
## [1] FALSE FALSE FALSE FALSE FALSE
x <- c(1, 2, NaN, NA, 4)
is.nan(x)
## [1] FALSE FALSE  TRUE FALSE FALSE

Penamaan Elemen

Objek R dapat mempunyai nama. Demikian juga dengan setiap elemen dalam sebuah objek data. Hal ini sangat berguna ketika menuliskan kode dan menjelaskan objek. Untuk memberikan nama bagi elemen-elemen dari vector, dapat menggunakan fungsi names()

x <- 1:3
names(x)
## NULL
names(x) <- c("New York", "Seattle", "Los Angeles") 
x
##    New York     Seattle Los Angeles 
##           1           2           3
names(x)
## [1] "New York"    "Seattle"     "Los Angeles"

Cara yang sama untuk list

names(l)
## NULL
names(l) <- c("teks", "vektor", "matriks", "tabel")
l
## $teks
## [1] "A"
## 
## $vektor
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
## 
## $matriks
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## 
## $tabel
##   numbers text
## 1      10    a
## 2      20    b
## 3      30    c
## 4      40    a
names(l)
## [1] "teks"    "vektor"  "matriks" "tabel"

Matriks dapat mempunyai nama kolom dan barisnya dengan menggunakan fungsi dimnames()

m <- matrix(1:4, nrow = 2, ncol = 2)
dimnames(m) <- list(c("a", "b"), c("c", "d")) 
m
##   c d
## a 1 3
## b 2 4

Penamaan kolom dan baris pada matriks bisa dilakukan terpisah menggunakan fungsi colnames() dan rownames()

colnames(m) <- c("h", "f")
rownames(m) <- c("x", "z")
m
##   h f
## x 1 3
## z 2 4

Seperti halnya matriks, kolom dan baris pada data frame juga dapat diberikan nama dengan menggunakan fungsi names() dan rownames(). Perhatikan ada perbedaan fungsi yang digunakan.

a <- c(10, 20, 30, 40)
b <- c("a", "b", "c", "a")
df <- data.frame(a, b)
df
names(df) <- c("numbers", "chars")
row.names(df) <- c("a", "b", "c", "d")

df

Note: Ketika membuat dataframe, R akan memberikan nama untuk kolom-kolom yang terbentuk. Hanya saja kadang nama yang diberikan tidak sesuai dengan yang diinginkan.

df2 <- data.frame(c(10, 20, 30, 40), 
                  c("a", "b", "c", "a"))
names(df2)
## [1] "c.10..20..30..40."     "c..a....b....c....a.."

Struktur Kendali

Percabangan

Pemilihan atau percabangan merupakan bagian penting dalam pemrograman Dalam R, hal ini dapat dilakukan dengan menggunakan perintah if ... else.

if {-}

Sebuah pernyataan atau statement di dalam if akan dieksekusi jika kondisinya bernilai TRUE. Jika FALSE, maka tidak akan ada pernyataan yang dieksekusi.

# https://www.datamentor.io/r-programming
if (expression) {
   statement
}

Contoh

x <- 5
if(x > 0){
   print("Positive")
}
## [1] "Positive"

if ... else {-}

Jika kondisi TRUE, maka statement1 akan dieksekusi. Jaka salah maka statement2 akan dieksekusi.

if (expression) {
   statement1
} else {
   statement2
}

Contoh

x <- -5
if(x > 0){
   print("Non Negative")
} else {
   print("Negative")
}
## [1] "Negative"

Ini sama saja artinya dengan

if(x > 0){
  print("Non Negative")
}

if(x < 0){
  print("Negative")
}
## [1] "Negative"

if ... else if ... else {-}

Jika kondisi benar, maka statement1 akan dieksekusi. Jaka salah maka akan periksa kondisi kedua. Jika benar maka statement2 akan dieksekusi. Jika salah maka statement3 akan dieksekusi

if ( expression) {
   statement1
} else if ( expression2) {
   statement2
} else {
   statement3
}

Contoh:

x <- -5
if(x == 0){
   print("Zero")
} else if(x < 0){
   print("Negative")
} else {
   print("Positive")
}
## [1] "Negative"

Loop

Loop berfungsi untuk mengulang perintah atau blok perintah. Dalam R, ada beberapa fungsi perintah looping, yaitu for, while, repeat

for loop

for loop digunakan untuk mengiterasi suatu vektor

for (val in sequence) {
   statement
}

Sebagai contoh membuat iterasi penjumlahan angka genap

x <- c(2,5,3,9,8,11,6)
count <- 0
total <- 0

for (val in x) {
   if(val %% 2 == 0) {
      count = count+1
      total = total + val
   }
}

cat("banyaknya angka genap:", count)
## banyaknya angka genap: 3
cat("\npenjumlahan angka genap:", total)
## 
## penjumlahan angka genap: 16

while loop

while loop digunakan untuk melakukan iterasi selama kondisi/expression tertentu terpenuhi.

while (expression)
{
   statement
}

Contoh

i <- 1
while (i < 6) {
   print(i)
   i = i+1
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

break dan next

Perintah break digunakan di dalam loop untuk menghentikan iterasi. Sedangkan perintah next digunakan untuk melewati sebuah iterasi.

# break
if (expression) {
   break
}

# next
if (expression) {
   next
}

Contoh

# break, berhenti pada iterasi ke-3
x <- 1:5
for (val in x) {
   if (val == 3){
      break
    }
   print(val)
}
## [1] 1
## [1] 2
# next, skip iterasi ke-3
x <- 1:5
for (val in x) {
   if (val == 3){
      next
   }
   print(val)
}
## [1] 1
## [1] 2
## [1] 4
## [1] 5

repeat loop

repeat loop digunakan untuk iterasi blok perintah berulang kali. Dalam repeat, tidak ada kondisi untuk keluar dari loop. Untuk itu, kita harus menggunakan perintah break secara eksplisit atau looping akan terus berjalan (infinite loop)

repeat {
   statement
}

Contoh

x <- 1
repeat {
   print(x)
   x = x+1
   if (x == 6){
      break
   }
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

  1. Statistika dan Sains Data, IPB University, ↩︎