Bab 2 Dasar Pemrograman R

Pada bab ini akan membahas hal-hal dasar tentang R yang harus diketahui dan dikuasai. Hal yang paling sederhana yang dapat dilakukan R adalah sebagai kalkulator. Coba Anda ketikan perintah di bawah ini pada console RStudio dan tekan tombol Enter setelah selesai.

2 + 4
## [1] 6

Akan muncul hasil [1] 6. Hasil [1] menunjukkan bahwa yang ditampilkan adalah dari elemen pertama. Hal ini akan dibahas di bagian 2.4.

Tanda > adalah prompt yang menunjukkan bahwa R sedang dalam posisi siap menerima perintah baru. Jika perintah belum lengkap maka akan berganti menjadi tanda +. Artinya ada perintah atau bagian script yang belum selesai.

> 2 +
+ 

Perhatikan setelah Anda tekan tombol Enter maka kursor di R yang sebelumnya > berganti + yang menandakan bahwa perintah belum lengkap. Maka jika Anda kembali menuliskan bilangan lain, misalkan 4 dan tekan tombol Enter maka prompt di R akan kembali menjadi > setelah menuliskan hasilnya karena perintah sudah lengkap dan selesai.

> 2 +
+ 4
## [1] 6

R adalah bahasa pemrograman yang case-sensitive. Artinya perbedaan huruf kapital dan huruf kecil sangat berpengaruh. Karena itu, penulisan nama objek atau nilai berupa karakter sangat tergantung dari kapitalisasinya. Perhatikan perbedaan dari kedua contoh berikut ini.

a <- 3
a
## [1] 3
A
## Error: object 'A' not found

Misalnya Anda membuat sebuah objek bernama a dengan nilai sebuah konstanta. Ketika Anda ingin mengambil nilai dari objek tersebut maka Anda hanya bisa memanggil dengan nama yang sama persis. Anda tidak bisa memanggil objek tersebut dengan nama lain meskipun ketika Anda mengucapkan dengan suara pengucapan yang sama. Anda tidak bisa memanggil objek a tersebut dengan A.

Ketika objek yang Anda panggil belum ada di session atau workingspace R saat ini maka akan muncuk error seperti contoh di atas.

2.1 Assignment

Bahasa pemrograman R mempunyai sedikit perbedaan dengan bahasa pemrograman pada umumnya. Salah satunya adalah pada operator assignment. Hampir semua bahasa pemrograman lain menggunakan tanda = sebagai operator assignment. Di R, yang utama dan paling banyak digunakan oleh pengguna R adalah operator panah kiri (<-). obj <- expr berarti “masukkan nilai hasil dari operasi di sisi kanan (expr) ke dalam objek di sisi kiri (obj)”. Pada contoh berikut, saya ingin memasukkan nilai numerik 5 ke objek yang disebut x.

x <- 5
x
## [1] 5

Apakah tidak bisa menggunakan operator = sebagai operator assignment? Tentu saja Anda juga bisa menggunakannya.

x = 5

Hal ini sangat membantu jika Anda seorang programmer yang menggunakan bahasa pemrograman lain yang menggunakan operator = sebagai operator assignment. Jadi Anda tidak perlu bingung dengan “Kapan saya harus menggunakan<- atau =?”. Tapi saya mendorong Anda untuk terbiasa menggunakan <- saat membuat program menggunakan R. Jika Anda menggunakan RStudio, Anda dapat menuliskan operator <- dengan menekan tombol ALT + -.

Jika Anda ingin mengetahui nilai suatu objek cukup panggil objek tersebut atau gunakan fungsi print().

x
## [1] 5
# or
print(x)
## [1] 5

2.2 Operator Assignment Lainnya

Ada beberapa operator assignment lainnya yang dapat Anda gunakan di R. Di bawah ini adalah daftar operator assignment.

(#tab:program1.9)Operator Assignment
Operator Cakupan Penjelasan
<- lokal/global nilai dari sebelah kanan dimasukkan ke dalam objek di sebelah kiri.
-> lokal/global nilai dari sebelah kiri dimasukkan ke dalam objek di sebelah kanan.
<<- global nilai dari sebelah kanan dimasukkan ke dalam objek global di sebelah kiri.
->> global nilai dari sebelah kiri dimasukkan ke dalam objek global di sebelah kanan.

Sekarang, mari kita lihat operator ->.

# Contoh 1
x <- 5
5 -> x
x
## [1] 5
# Contoh 1
y <- 2 + 4
2 + 4 -> y
y
## [1] 6

Seperti yang Anda lihat, operator -> memiliki sisi yang berlawanan dengan <-. Nilai atau ekspresi yang mengembalikan nilai ada di sisi kiri, sedangkan objek di sisi kanan. Untuk dua operator assignment yang lain kita membahasnya di pembahasan function (Bab 2.10) dalam R. Karena mereka biasanya hanya digunakan dalam sebuah fungsi.

Jika Anda memasukan nilai baru ke dalam sebuah objek yang sama maka nilai yang sebelumnya akan dihapus dan digantikan dengan nilai yang baru.

# Nilai x sebelumnya
x
## [1] 5
# Nilai x yang baru
x <- 8 + 2
x
## [1] 10
# Nilai x yang baru
x <- x + 5
x
## [1] 15

Ketika menggunakan R, setiap yang ada di R disebut objek. Jenis-jenis objek data yang ada di R adalah vector, factor, matriks, array, dataframe, list dan objek berupa function.

2.3 Penamaan Objek

Aturan penamaan objek di R, seperti vector (2.4), matriks (2.6), dataframe (2.8) dan lain-lain, hampir sama dengan aturan penamaan pada bahasa pemrograman lain. Namun ada beberapa aturan khusus yang terdapat di R. Berikut aturan penamaan objek di R.

  • Menggunakan kombinasi alfabet (a-z, A-Z), angka (0-9), titik atau underscore.
  • Diawali alfabet, titik atau underscore. Tidak boleh diawali dengan angka.
  • Tidak mengandung spasi, tab atau karakter khusus seperti !, @, # dan lainnya.
  • Sebaiknya tidak menggunakan beberapa penamaan atau nilai yang sudah digunakan oleh R (function dan keyword lainnya). Misalnya c, q, TRUE, FALSE, df, dt, rnorm, runif, rf, exp, dan lain-lain. Untuk mengetahui nama-nama yang sudah digunakan oleh R Anda dapat mengetikkan perintah ?reserved di console RStudio Anda.

Berikut ini beberapa contoh nama

2.4 Vector

Vector adalah objek data paling sederhana yang ada di dalam R. Secara umum jenis vector terbagi 2, yaitu numeric dan character. Ada banyak sekali cara untuk membuat sebuah vector di R. Di bagian ini akan dibahas beberapa cara yang banyak dan mungkin akan sering Anda gunakan.

2.4.1 Fungsi c()

Fungsi yang paling sering digunakan untuk membuat sebuah vector adalah dengan menggunakan fungsi c().

x <- c(2, 1, 5, 3, 1)
x
## [1] 2 1 5 3 1

Pada script di atas, dibuat sebuah objek x berupa vector numeric. Setiap elemen dipisah menggunakan tanda koma (,). Fungsi ini dapat digunakan untuk membuat vector numeric atau character. Indeks di R dimulai dari 1, tidak seperti kebanyakan bahasa pemrograman lain yang indeksnya dimulai dari 0. Hal ini cukup memudahkan pengguna karena umumnya manusia menghitung mulai dari 1, bukan dari 0.

ketika Anda ingin mengambil elemen ke 2 dari vector x, maka Anda dapat menjalankan perintah

x[2]
## [1] 1

2.4.2 Tanda titik dua/colon (:)

Untuk membuat sebuah vector numeric berurutan secara meningkat atau menurun. Lihat contoh berikut ini.

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

Fungsi dari operator : pada contoh di atas adalah membuat vector numeric dengan nilai dari 1 s/d 10. Tentu saja operator increment ini hanya dapat digunakan untuk numeric dan meningkat sebesar 1 nilai. Operator ini dapat juga digunakan untuk membuat vector dengan nilai menurun.

# membuat vector numeric dengan nilai dari 10 s/d -10 secara menurun 1
x <- 10:-10 # 10 sampai -10
x
##  [1]  10   9   8   7   6   5   4   3   2   1   0  -1  -2  -3  -4  -5  -6  -7  -8
## [20]  -9 -10

2.4.3 Fungsi seq()

Fungsi ini dapat digunakan untuk membuat vector berurutan dan dengan increment tertentu.

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

Secara default increment dari fungsi seq() adalah by = 1. Jika Anda ingin nilai increment lain maka hanya perlu mengganti nilai pada argumen by. Fungsi ini juga hanya dapat digunakan untuk membuat vector numeric.

x <- seq(from = 1, to = 20, by = 2) # 1 sampai 20 dengan increment 2
x
##  [1]  1  3  5  7  9 11 13 15 17 19
x <- seq(from = 1, to = 10, length.out = 7) # 1 sampai 10, sebanyak 7 elemen, increment mengikuti
x
## [1]  1.0  2.5  4.0  5.5  7.0  8.5 10.0
x <- seq(from = 1, to = 10, along.with = 1:4) # 1 sampai 10, sebanyak elemen dari vector lain
x
## [1]  1  4  7 10

2.4.4 Mengambil satu kolom dari dataframe atau matriks

Mengambil sebuah kolom dari sebuah dataframe akan dibahas lebih jauh di bagian dataframe (2.8). Dengan menggunakan tanda dolar $ dan diikuti dengan nama kolom yang akan diambil dari dataframe tersebut.

mtcars$mpg
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4

Dari dataframe mtcars diambil semua nilai yang ada di kolom mpg

Cara ini akan dicontohkan lebih banyak pada bagian-bagian selanjutnya di bab ini.

2.4.5 Fungsi unlist()

Fungsi ini berguna untuk menjadikan sebuah objek list menjadi sebuah vector. Pembahasan lebih lanjut akan dibahas di bagian 2.9.

x <- list(mtcars$mpg, mtcars$disp)
x
## [[1]]
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
## 
## [[2]]
##  [1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8
## [13] 275.8 275.8 472.0 460.0 440.0  78.7  75.7  71.1 120.1 318.0 304.0 350.0
## [25] 400.0  79.0 120.3  95.1 351.0 145.0 301.0 121.0
x <- unlist(x)
x
##  [1]  21.0  21.0  22.8  21.4  18.7  18.1  14.3  24.4  22.8  19.2  17.8  16.4
## [13]  17.3  15.2  10.4  10.4  14.7  32.4  30.4  33.9  21.5  15.5  15.2  13.3
## [25]  19.2  27.3  26.0  30.4  15.8  19.7  15.0  21.4 160.0 160.0 108.0 258.0
## [37] 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8 275.8 275.8 472.0 460.0
## [49] 440.0  78.7  75.7  71.1 120.1 318.0 304.0 350.0 400.0  79.0 120.3  95.1
## [61] 351.0 145.0 301.0 121.0

Fungsi unlist() menggabungkan semua list menjadi sebuah vector.

Catatan penting untuk vector: walaupun ditampilkan ke samping, dimensi vector di R sebenarnya ke bawah. Bayangkan untuk sebuah vector seperti satu kolom di Ms Excel.

Semua contoh di atas untuk membuat vector adalah vector numeric. Vector numeric adalah vector yang semua elemennya bernilai dan bertipe numeric.

2.4.6 Fungsi rep()

Dengan fungsi rep() Anda dapat membuat sebuah vector dengan mengulang-ulang nilai yang diinginkan sebanyak yang dibutuhkan.

# Membuat sebuah vector numeric yang semua elemennya bernilai 3 sebanyak 10 elemen
x <- rep(3, 10)
x
##  [1] 3 3 3 3 3 3 3 3 3 3

2.4.7 Vector character

Vector character adalah vector yang semua elemennya bertipe character.

y <- c("a", "A", "d", "c")
y
## [1] "a" "A" "d" "c"

Jika ketika membuat sebuah vector bernilai numeric namun ada satu saja elemennya bertipe character maka semua elemennya akan bertipe character.

c(1, 2, 3, 5, "a")
## [1] "1" "2" "3" "5" "a"

Di R ada 2 buah vector khusus yang bertipe character, yaitu letters dan LETTERS.

letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
LETTERS
##  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"

Dua buah vector atau lebih dapat digabungkan dengan fungsi c(). Namun, jika salah satu vector bertipe character, maka vector hasil gabungan akan menjadi vector character. Contoh di bawah ini menggabungkan vector x dan y. Vector x adalah vector numeric, sedangkan y adalah vector character. Karena ada satu atau lebih elemen yang berupa character, maka ketika x dan y digabungkan akan menjadi vector character.

c(x, y)
##  [1] "3" "3" "3" "3" "3" "3" "3" "3" "3" "3" "a" "A" "d" "c"

Cara lain yang dapat digunakan untuk membuat vector character adalah menggunakan fungsi paste(), paste0() atau sprintf(). Jalankan dan perhatikan perbedaan dari contoh perintah di bawah ini.

paste("A", 1:5)
## [1] "A 1" "A 2" "A 3" "A 4" "A 5"
paste0("A", 1:5)
## [1] "A1" "A2" "A3" "A4" "A5"
sprintf("A%s", 1:5)
## [1] "A1" "A2" "A3" "A4" "A5"

2.5 Factor

Factor merupakan bentuk lebih luas dari vector. Biasanya factor lebih sering digunakan untuk menyimpan data nominal atau ordinal. Misalnya vector character yang berisi "male" dan "female". Pada vector character, nilainya adalah "male" dan "female" seperti terlihat apa adanya. Namun pada factor, tampilan dari isi datanya mungkin "male" dan "female" tetapi isi dari factor adalah pengkodean numerik. Misal untuk "female" nilai sebenarnya adalah 1, sedangkan "male" berniali 2.

fc <- factor(c("SD", "SMA", "SMP", "SMP", "SD", "SMA", "SD", "SMP"))
fc
## [1] SD  SMA SMP SMP SD  SMA SD  SMP
## Levels: SD SMA SMP

Nilai sebenarnya dari factor tersebut adalah

print.default(fc)
## [1] 1 2 3 3 1 2 1 3

Factor mempunyai level, secara default levelnya adalah berdasarkan urutan alfabet. Untuk merubah level dari sebuah factor, gunakan argumen levels =.

factor(fc, levels = c("SD", "SMP", "SMA"))
## [1] SD  SMA SMP SMP SD  SMA SD  SMP
## Levels: SD SMP SMA
factor(fc, levels = c("SD", "SMP", "SMA"), ordered = TRUE)
## [1] SD  SMA SMP SMP SD  SMA SD  SMP
## Levels: SD < SMP < SMA

2.6 Matriks

Matriks adalah objek di R yang memiliki 2 dimensi, baris (row) dan kolom (column), dan tipe nilainya sama. Jika ketika membuat sebuah matriks elemennya memiliki minimal 1 elemen bertipe character maka seluruh matriks tersebut akan bertipe character. Membuat matriks di R menggunakan vector yang dikonversi dimensinya.

x <- mtcars$mpg # sebuah vector
length(x) 
## [1] 32

Karena vector x memiliki 32 elemen, maka dimensi matriks yang dapat dibuat adalah 2 angka yang hasil perkaliannya menghasilkan nilai 32. Salah satunya adalah 8 x 4 = 32.

m <- matrix(data = x, nrow = 8, ncol = 4)
m
##      [,1] [,2] [,3] [,4]
## [1,] 21.0 22.8 14.7 19.2
## [2,] 21.0 19.2 32.4 27.3
## [3,] 22.8 17.8 30.4 26.0
## [4,] 21.4 16.4 33.9 30.4
## [5,] 18.7 17.3 21.5 15.8
## [6,] 18.1 15.2 15.5 19.7
## [7,] 14.3 10.4 15.2 15.0
## [8,] 24.4 10.4 13.3 21.4

Argumen byrow = TRUE artinya matriks akan setiap elemen x diisikan ke m memenuhi baris terlebih dahulu. Jika byrow = FALSE maka setiap elemen x diisikan ke m berdasarkan kolom terlebih dahulu.

matrix(1:10, ncol = 5, nrow = 2, byrow = TRUE)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
matrix(1:10, ncol = 5, nrow = 2, byrow = FALSE)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10

Untuk membuat matriks dengan nilai yang sama seluruhnya, maka dapat dilakukan seperti berikut.

matrix(data = 0, nrow = 5, ncol = 6)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    0    0    0    0    0    0
## [2,]    0    0    0    0    0    0
## [3,]    0    0    0    0    0    0
## [4,]    0    0    0    0    0    0
## [5,]    0    0    0    0    0    0

Untuk mengakses elemen dari suatu matriks, Anda dapat menggunakan indeks dari baris atau kolomnya.

# Mengambil elemen matriks `m` di baris 4
m[4, ]
## [1] 21.4 16.4 33.9 30.4
# Mengambil elemen matriks `m` di kolom 3
m[, 3]
## [1] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3
# Mengambil elemen matriks `m` di baris 4 dan kolom 3
m[4, 3]
## [1] 33.9
# Mengambil elemen matriks `m` di baris 4 dan 6, dan kolom 3
m[c(4, 6), 3]
## [1] 33.9 15.5

R menyediakan sebuah fungsi yaitu diag() untuk mengakses nilai-nilai pada diagonal utama sebuah matriks.

diag(m)
## [1] 21.0 19.2 30.4 30.4

Anda juga dapat mengganti nilai dari elemen suatu matriks dengan menggunakan operator assignment.

m[4, 3] <- 0
m[4, 3]
## [1] 0
m # perhatikan elemen di baris 4 kolom 3 sudah berubah jadi 0.0
##      [,1] [,2] [,3] [,4]
## [1,] 21.0 22.8 14.7 19.2
## [2,] 21.0 19.2 32.4 27.3
## [3,] 22.8 17.8 30.4 26.0
## [4,] 21.4 16.4  0.0 30.4
## [5,] 18.7 17.3 21.5 15.8
## [6,] 18.1 15.2 15.5 19.7
## [7,] 14.3 10.4 15.2 15.0
## [8,] 24.4 10.4 13.3 21.4

2.7 Array

Array merupakan objek seperti matriks dengan dimensi lebih banyak. Jika matriks hanya mempunyai 2 dimensi, maka array dapat memiliki lebih dari 2 dimensi.

Ilustrasi Array 3 dimensi

Gambar 2.1: Ilustrasi Array 3 dimensi

array(mtcars$mpg, dim = c(4, 4, 2))
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,] 21.0 18.7 22.8 17.3
## [2,] 21.0 18.1 19.2 15.2
## [3,] 22.8 14.3 17.8 10.4
## [4,] 21.4 24.4 16.4 10.4
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,] 14.7 21.5 19.2 15.8
## [2,] 32.4 15.5 27.3 19.7
## [3,] 30.4 15.2 26.0 15.0
## [4,] 33.9 13.3 30.4 21.4

Salah satu array yang ada setelah Anda install R adalah array Titanic.

Titanic
## , , Age = Child, Survived = No
## 
##       Sex
## Class  Male Female
##   1st     0      0
##   2nd     0      0
##   3rd    35     17
##   Crew    0      0
## 
## , , Age = Adult, Survived = No
## 
##       Sex
## Class  Male Female
##   1st   118      4
##   2nd   154     13
##   3rd   387     89
##   Crew  670      3
## 
## , , Age = Child, Survived = Yes
## 
##       Sex
## Class  Male Female
##   1st     5      1
##   2nd    11     13
##   3rd    13     14
##   Crew    0      0
## 
## , , Age = Adult, Survived = Yes
## 
##       Sex
## Class  Male Female
##   1st    57    140
##   2nd    14     80
##   3rd    75     76
##   Crew  192     20

Untuk mengetahui ukuran dimensi dari sebuah array Titanic dapat menggunakan fungsi dim().

dim(Titanic)
## [1] 4 2 2 2

Artinya array Titanic adalah array 4 dimensi.

2.8 Dataframe

Dataframe layaknya sebuah tabel di Ms Excel, terdiri dari baris dan kolom dengan nama masing-masing kolom berbeda. Apa bedanya dengan matriks? Matriks hanya bisa menyimpan tipe data yang sama, numeric atau character seluruhnya. Pada dataframe, masing-masing kolom boleh memiliki tipe data yang berbeda. Dataframe seperti umumnya bentuk tabel yang sering kita gunakan.

Contoh dataframe yang ada di dalam R salah satunya adalah mtcars.

Tabel 2.1: Data mtcars
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

Umumnya ketika Anda melakukan analisis data, maka data yang Anda gunakan adalah berupa tabel. Di dalam R sebuah tabel yang terdiri dari baris dan kolom disebut dataframe atau data.frame. Baris di dataframe disebut observation dan kolom disebut variable (Gambar 2.2).

Dataframe Terstruktur (sumber: https://r4ds.had.co.nz/tidy-data.html)

Gambar 2.2: Dataframe Terstruktur (sumber: https://r4ds.had.co.nz/tidy-data.html)

Untuk membuat sebuah dataframe Anda dapat menggunakan fungsi data.frame(). Misalnya Anda akan membuat sebuah dataframe bernama data1 yang berisi 5 observation dan 2 variable. Variable pertama bernama x1 berisi sebuah vector numeric dengan nilai {1, 3, 2, 6, 4} dan variable kedua bernama v2 berisi vector character dengan nilai {“a”, “A”, “c”, “d”, “E”}. Anda dapat membuat vector x1 dan v1 terlebih dahulu menggunakan fungsi c() (atau fungsi lain yang sesuai untuk membuat vector). Kemudian membuat dataframe dari vector tersebut. Perhatikan contoh berikut ini.

x1 <- c(1, 3, 2, 6, 4)
v1 <- c("a", "A", "c", "d", "E")
data1 <- data.frame(x1 = x1, v1 = v1)

Anda dapat melihat dataframe yang sudah dibuat tersebut dengan memanggil nama objek dataframe.

data1
##   x1 v1
## 1  1  a
## 2  3  A
## 3  2  c
## 4  6  d
## 5  4  E

Perhatian! Ketika Anda membuat sebuah dataframe yang berisi sebuah variable character pada R dengan versi 3.6.3 atau sebelumnya, maka secara otomatis variable dari vector character tersebut akan dirubah menjadi variable factor (2.5). Hal ini terjadi karena fungsi data.frame() mempunyai sebuah argumen stringsAsFactors = TRUE. Pada R versi 4.0.0 atau lebih baru, variable dari vector character akan tetap dijadikan sebuah variable character karena argumen stringsAsFactors = FALSE. Tentu saja Anda dapat merubahnya dengan menambahkan argumen tersebut ketika Anda membuat dataframe.

data1 <- data.frame(x1 = x1, v1 = v1, stringsAsFactors = TRUE) # atau TRUE
data1
##   x1 v1
## 1  1  a
## 2  3  A
## 3  2  c
## 4  6  d
## 5  4  E

Untuk mengetahui ukuran dimensi sebuah dataframe Anda dapat gunakan fungsi dim() seperti yang sudah dicontohkan pada pembahasan array (2.7).

dim(data1)
## [1] 5 2

Hasil dari fungsi dim() untuk dataframe atau matrix adalah sebuah vector dengan elemen pertama adalah banyaknya observation, sedangkan elemen kedua adalah banyaknya variable. Pada contoh di atas berarti dataframe data1 memiliki 5 observation dan 2 variable.

Untuk mengetahui struktur dari sebuah dataframe Anda dapat gunakan fungsi str() (str-ucture). Dengan fungsi ini Anda dapat memperoleh informasi lebih lengkap dari sebuah dataframe seperti banyaknya observation dan variable, nama-nama variable, tipe variable, dan beberapa nilai baris pertama untuk masing-masing variable.

str(data1)
## 'data.frame':	5 obs. of  2 variables:
##  $ x1: num  1 3 2 6 4
##  $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5

Dari hasil di atas Anda dapat ketahui bahwa objek data1 adalah sebuah dataframe berukuran 5 observation (obs.) dan 2 variable. Nama variable yang ada adalah x1 dan v1. Variable x1 adalah variable bertipe numeric, sedangkan v1 adalah variable character alias factor. Nilai pada baris pertama dataframe data1 untuk variable x1 adalah 1 dan variable v1 adalah “a”. Nilai “a” dikodekan sebagai 1, “A” dikodekan sebagai 2, “c” dikodekan sebagai 3, dan seterusnya.

Selanjutnya untuk mengambil nilai sebuah variable dari sebuah dataframe dapat menggunakan tanda dollar ($) atau menggunakan indeks. Perhatikan contoh berikut.

# Menggunakan tanda dollar
data1$x1
## [1] 1 3 2 6 4
# Menggunakan indeks urutan posisi variable
data1[, 1]
## [1] 1 3 2 6 4
# Menggunakan nama variable pada indeks
data1[, "x1"]
## [1] 1 3 2 6 4

Untuk membuat variable baru Anda dapat menggunakan cara yang hampir sama dan menggunakan assignment. Berikut ini kita akan membuat variable baru bernama x2 berupa variable numeric.

data1$x2 <- 1:5
data1
##   x1 v1 x2
## 1  1  a  1
## 2  3  A  2
## 3  2  c  3
## 4  6  d  4
## 5  4  E  5
str(data1)
## 'data.frame':	5 obs. of  3 variables:
##  $ x1: num  1 3 2 6 4
##  $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5
##  $ x2: int  1 2 3 4 5

Tipe num artinya variable tersebut adalah double dan tipe int adalah tipe integer.

Kemudian kita buat variable baru bernama x3 yang merupakan penjumlahan dari variable x1 dan x2.

data1$x3 <- data1$x1 + data1$x2
str(data1)
## 'data.frame':	5 obs. of  4 variables:
##  $ x1: num  1 3 2 6 4
##  $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5
##  $ x2: int  1 2 3 4 5
##  $ x3: num  2 5 5 10 9

2.9 List

Objek list pada dasarnya mirip seperti vector, hanya saja tipe elemennya bisa berbeda. Jika pada vector numeric semua elemennya harus berupa numerik. Pada vector character semuanya harus karakter. Pada objek list elemennya dapat berupa vector, factor, matriks, array, dataframe, bahkan list di dalam list atau objek lain seperti model prediktif yang dibuat di R.

Contoh membuat list dengan fungsi list().

list(2, "A", c(4, 5, 2), iris[1:5,])
## [[1]]
## [1] 2
## 
## [[2]]
## [1] "A"
## 
## [[3]]
## [1] 4 5 2
## 
## [[4]]
## # A tibble: 5 x 5
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##          <dbl>       <dbl>        <dbl>       <dbl> <chr>  
## 1          5.1         3.5          1.4         0.2 setosa 
## 2          4.9         3            1.4         0.2 setosa 
## 3          4.7         3.2          1.3         0.2 setosa 
## 4          4.6         3.1          1.5         0.2 setosa 
## 5          5           3.6          1.4         0.2 setosa
Ilustrasi objek di dalam R

Gambar 2.3: Ilustrasi objek di dalam R

2.10 Function dan Packages

//TODO: Membahas cara menggunakan fungsi yang sudah ada di R, membuat fungsi sendiri dan cara menggunakan package.

Pada dasarnya R adalah bahasa pemrograman functional atau Functional Programming (FP). Wickham (2015) menyatakan bahwa R menyediakan banyak alat untuk pembuatan dan manipulasi fungsi. Secara khusus R memiliki apa yang dikenal sebagai first class function. Anda dapat melakukan apa saja dengan fungsi seperti yang dapat Anda lakukan dengan vector: Anda dapat memasukkan mereka ke dalam sebuah objek, menyimpannya dalam list, menjadikannya sebagai argumen pada fungsi yang lain, membuat fungsi di dalam fungsi, dan bahkan menjadikannya sebagai hasil keluaran dari suatu fungsi.

2.10.1 Menggunakan fungsi yang sudah ada

Karena dibuat untuk memudahkan analisis data, R mempunyai banyak fungsi yang tersedia untuk melakukan analisis statistik. Untuk mendapatkan nilai rata-rata dari sebuah vector numeric Anda dapat langsung gunakan fungsi mean(). Untuk mendapatkan milai minimum atau maksimum tersedia fungsi min() dan max(). Fungsi sd() dapat digunakan untuk mendapatkan nilai standard deviasi atau fungsi var() untuk mendapatkan nilai ragam (varians). Perhatikan contoh berikut ini.

x <- seq(1, 100, by = 4)

# Rata-rata vector x
mean(x)
## [1] 49
# Minimum dari vector x
min(x)
## [1] 1
# Maksimum dari vector x
max(x)
## [1] 97

Jika Anda ingin mencari nilai minimum dan maksimum sekaligus, Anda dapat gunakan fungsi range(). Output dari fungsi ini adalah vector numeric dengan dua elemen berisi nilai minimum dan maksimum.

range(x)
## [1]  1 97

Jika Anda ingin mencari nilai statistik lima serangkai (minimum, Q1, Q2 atau median, Q3, maksimum), Anda dapat gunakan fungsi summary().

summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       1      25      49      49      73      97
Aktifkan Package pada Tab Packages.

Gambar 2.4: Aktifkan Package pada Tab Packages.

Jika fungsi atau data yang akan Anda gunakan berasal dari sebuah package, maka Anda dapat gunakan fungsi library(), require() atau klik beri tanda checklist pada tab Packages seperti pada Gambar 2.4 untuk mengaktifkan package tersebut pada session yang sedang Anda gunakan. Tentunya package tersebut harus sudah Anda install sebelumnya. Misalnya Anda ingin menggunakan data flights dari package nycflights13. Hal pertama Anda harus pastikan package tersebut sudah terinstall dengan baik di R Anda. Jika Anda belum install package tersebut Anda dapat menginstallnya dengan perintah berikut.

install.packages("nycflights13")

Kaetika Anda akan install sebuah package, nama package tersebut harus berupa string. Anda hanya perlu melakukan satu kali install saja, tidak perlu install ketika setiap kali akan Anda gunakan. Sekarang Anda coba untuk memanggil data flights dari package nycflights13 tanpa mengaktifkan package terlebih dahulu. Maka akan muncul sebuah error yang menyatakan bahwa objek flights tidak ditemukan.

flights
## Error: object 'flights' not found

Karena data flights ada di dalam package nycflights13 maka Anda perlu aktifkan terlebih dahulu package tersebut. Anda dapat mengaktifkannya dengan perintah berikut ini.

library(nycflights13)

Kemudian panggil data flights. Kita gunakan fungsi head() untuk menampilkan beberapa baris pertama saja dari data. Secara default fungsi head() akan menampilkan 6 baris pertama saja dari data yang kita sebutkan pada argumen pertamanya.

head(flights)
## # A tibble: 6 x 19
##    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
## 1  2013     1     1      517            515         2      830            819
## 2  2013     1     1      533            529         4      850            830
## 3  2013     1     1      542            540         2      923            850
## 4  2013     1     1      544            545        -1     1004           1022
## 5  2013     1     1      554            600        -6      812            837
## 6  2013     1     1      554            558        -4      740            728
## # ... with 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

Karena package nycflights13 sudah Anda aktifkan sebelumnya maka ketika data flights dipanggil tidak akan muncul error.

2.10.2 Membuat fungsi sendiri

Ketika Anda membuat sebuah script yang akan digunakan berkali-kali namun dengan nilai input yang berbeda-beda, maka ada baiknya script tersebut dibuat menjadi sebuah fungsi atau function sesuai dengan kebutuhan Anda atau User-Defined Function. Untuk membuat function di R Anda dapat menggunakan fungsi function(). Misalnya Anda mempunyai script seperti berikut.

a <- 5
b <- 7
d <- a + b
d
## [1] 12

Kemudian ketika Anda ingin menggunakan nilai lain untuk a namun dengan nilai b yang sama, misalnya a <- 2, Anda perlu menjalankan perintah seperti berikut.

a <- 2
d <- a + b
d
## [1] 9

Jika script di atas dibuat sebuah fungsi, misalnya dengan nama fungsi sum_ab, maka Anda dapat membuatnya seperti berikut ini. Fungsi tersebut memiliki 2 buah parameter atau argumen, yaitu a dan b berupa nilai numerik. Argumen a dan b harus diisi ketika memanggil fungsi tersebut. Fungsi return() di dalam fungsi sum_ab() menentukan nilai yang akan dijadikan keluaran (output) dari fungsi sum_ab().

sum_ab <- function(a, b){
  d <- a + b
  return(d)
}

Selanjutnya panggil fungsi tersebut dengan argumen yang diperlukan.

sum_ab(a = 5, b = 7)
## [1] 12

Merubah nilai a <- 2 dapat dilakukan dengan lebih mudah.

sum_ab(a = 2, b = 7)
## [1] 9

Bagaimana jika tidak ada argumen yang diberikan ketika memanggil fungsi tersebut? Dalam hal ini akan terjadi error. Error yang terjadi karena argumen pada fungsi ini adalah tipe argumen yang harus diisi atau tidak mempunyai nilai default.

sum_ab()
## Error in sum_ab() : argument "a" is missing, with no default

Apa itu nilai default argumen pada sebuah fungsi? Kita akan sedikit memodifikasi fungsi sum_ab() yang sudah dibuat sebelumnya.

sum_ab <- function(a = 1, b = 1){
  d <- a + b
  return(d)
}

Fungsi sum_ab() sekarang memiliki nilai default untuk setiap argumennya. Argumen a memiliki nilai 1 dan b juga 1. Ketika Anda panggil fungsi sum_ab() tanpa menuliskan nilai untuk argumennya maka secara default nilai-nilai tersebut yang akan digunakan.

sum_ab()
## [1] 2
sum_ab(a = 5, b = 3)
## [1] 8

2.10.3 Install Package

Package adalah sebuah kumpulan fungsi atau data yang dibuat untuk memudahkan proses di R tanpa harus menuliskan ulang script yang dibutuhkan. Saat ini package menjadi bagian yang sangat penting bagi Data Analyst atau Data Scientist ketika menggunakan R. Karena dengan package tambahan (yang belum ada ketika install R) pekerjaan dalam mengolah data menjadi lebih efisien.

Untuk dapat menggunakan fungsi atau data dari sebuah package tambahan Anda perlu install terlebih dahulu. Salah satu contohnya sudah disampaikan pada bagian 2.10.1, yaitu package {nycflights13}. Selanjutnya Anda dapat install juga package {ggplot2}. Package ini sangat berguna untuk membuat visualisasi data di R. Untuk melihat help dari package ini Anda dapat melakukannya dengan cara yang akan di bahas di bagian 2.11.

Install package di R sangat mudah dengan fungsi install.packages("namapackage") atau melalui menu Install di tab Packages di RStudio. Yang perlu Anda perhatikan ketika akan install package adalah koneksi internet, nama package dan repository-nya. Koneksi internet yang baik sangat dibutuhkan ketika install package untuk R mendownload file package tersebut. Selanjutnya nama package juga harus sesuai dari penulisannya, termasuk huruf kapitalnya. Misalnya Anda ingin install package {ggplot2}, maka Anda harus menuliskannya dengan install.packages("ggplot2"). Jika penulisannya tidak sama maka package tersebut tidak akan diinstall. Perhatikan contoh berikut ini.

install.packages("ggplot")
## Installing package into �C:/Users/Lenovo/Documents/R/win-library/4.0�
## (as �lib� is unspecified)
## Warning in install.packages :
##   package ‘ggplot’ is not available (for R version 4.0.1)

Contoh di atas adalah pemberitahuan ketika package yang ingin Anda install tidak tersedia. Ketika nama package yang Anda tuliskan ada di repository maka akan ada pop-up download file package. Sekarang coba perhatikan contoh berikut ini.

install.packages("ggplot2")
## Installing package into �C:/Users/Lenovo/Documents/R/win-library/4.0�
## (as �lib� is unspecified)
## trying URL 'http://cran.rstudio.com/bin/windows/contrib/4.0/ggplot2_3.3.2.zip'
## Content type 'application/zip' length 4067278 bytes (3.9 MB)
## downloaded 3.9 MB
## 
## package ‘ggplot2’ successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
## 	C:\Users\Lenovo\AppData\Local\Temp\RtmpUd5mDA\downloaded_packages

Hal yang perlu Anda perhatikan selanjutnya adalah repository package. Ada beberapa repository yang digunakan sebagai tempat penyimpanan package. Reposiroty yang paling umum adalah Comprehensive R Archieve Network (CRAN). Ketika Anda menggunakan fungsi install.packages() maka secara otomatis package yang akan diinstall berasal dari CRAN. Selain itu ada beberapa repository lain seperti GitHub, Bitbucket, Bioconductor dan lain-lain. Pada kesempatan ini hanya akan membahas repository GitHub saja.

Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum ada di CRAN atau versi pengembangan (development) yang belum submit ke CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package {devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools} karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika menggunakan OS Windows.

Misalnya Anda ingin install package {DataExplorer} dari Github. Yang perlu Anda ketahui adalah link/username dari repository package tersebut. Repository GitHub package {DataExplorer} adalah https://github.com/boxuancui/DataExplorer. Argumen yang dibutuhkan adalah username dan nama repository. Username dari package ini adalah boxuancui dan repository-nya adalah DataExplorer. Anda dapat gunakan perintah berikut ini.

install.packages("devtools")
devtools::install_github("boxuancui/DataExplorer")

2.11 Mencari Help Sebuah Fungsi

//TODO: Membahas cara mencari help dari sebuah fungsi dan package.

Ketika Anda akan menggunakan sebuah fungsi di R ada baiknya untuk Anda mengetahui beberapa hal tentang fungsi tersebut. Yang harus Anda ketahui dari sebuah fungsi paling tidak adalah untuk apa fungsi tersebut digunakan, apa saja argumen yang diperlukan, bagaimana penggunaannya dan output seperti apa yang dihasilkan.

Misalnya Anda ingin gunakan fungsi mean(), maka Anda dapat mengetikkan ?mean atau help("mean"). Jika Anda menggunakan RStudio maka akan muncul halaman help dari fungsi mean() di tab Help.

Halaman Help Fungsi mean().

Gambar 2.5: Halaman Help Fungsi mean().

Umumnya pada sebuah halaman help akan ada informasi fungsi tersebut berasal dari package apa, pada Gambar 2.5 diketahui fungsi mean() berasal dari package {base}. Kemudian deskripsi singkat tentang fungsi (Description), penggunaan (Usage), penjelasan setiap argumen pada fungsi tersebut (Arguments), penjelasan lebih detail (Value/Detail, jika ada) dan contoh penggunaan fungsi (Examples, jika ada).

Hal ini jg berlaku jika Anda ingin melihat halaman help dari sebuah data yang ada di R, baik itu dari package {base} ataupun package tambahan yang lain. Misalnya halaman help dari data iris. Ketikkan ?iris pada console RStudio untuk menampilkan halaman help data iris. Dari Gambar 2.6 diketahui bahwa data iris berasal dari package {datasets}.

Halaman Help Data Iris.

Gambar 2.6: Halaman Help Data Iris.

Jika Anda ingin mencari help sebuah fungsi yang berasal dari package tertentu yang sudah Anda install sebelumnya tetapi belum Anda aktifkan package tersebut, maka Anda dapat gunakan format namespace (namapackage::namafungsi). Sebagai ilustrasi Anda dapat mencari help dari fungsi read_excel() dari package {readxl} (https://readxl.tidyverse.org/). Untuk mencari hellp fungsi tersebut Anda dapat ketikkan ?readxl::read_excel di console dan akan muncul halaman help seperti pada Gambar 2.7.

Halaman Help Fungsi read_excel().

Gambar 2.7: Halaman Help Fungsi read_excel().

Cara lain untuk mencari help di R adalah dengan menggunakan fungsi help(). Misalnya untuk help dari fungsi mean() Anda ketikkan di console help('mean"), help("iris") untuk data iris. Untuk melihat help sebuah fungsi dari package yang belum Anda aktifkan, Anda juga harus menyebutkan nama packagenya seperti help("read_excel", package = "readxl"). Apa yang terjadi jika Anda tidak menyebutkan nama packagenya?

help("read_excel")

Tetapi jika Anda sudah mengaktikan package tersebut, baik menggunakan fungsi library(), require() ataupun dengan klik pada tab Packages, Anda tidak perlu menyebutkan nama package tersebut. Cukup mengetikkan help("read_excel").

library(readxl)
help("read_excel")

Untuk melihat help dari suatu package, misalnya package {readxl}, Anda dapat gunakan help(package = "readxl").

2.12 Latihan

  1. Buatlah sebuah vector bernama x1 yang isinya merupakan nilai dari 5 s/d 150!
  2. Buatlah sebuah vector bernama x2 yang isinya merupakan nilai dari 10 s/d 150 dengan penambahan (increment) 5!
  3. Install package {readr} dari CRAN dan GitHub, kemudian perhatikan perbedaannya!

Daftar Pustaka

Wickham, Hadley. 2015. Advance R. Boca Raton, Florida: Chapman; Hall/CRC. http://adv-r.had.co.nz/.