Dasar-dasar Pemrograman R

Memasukkan Nilai ke Sebuah Variabel

x <- 1
2 -> y
z = 3

Itulah ke-3 cara untuk memasukkan nilai ke sebuah variabel, khusus tanda ->, variabel berada di sebelah kanan.

Memanggil Objek

Untuk menampilkan variabel, kita bisa langsung mengetik nama variabel yang telah dibuat.

x
## [1] 1

Atau bisa juga menggunakan fungsi print() dan cat():

print(y)
## [1] 2
cat(z)
## 3

Penamaan Objek di R

Pada contoh sebelumnya, kita mempunyai objek dengan nama x, y, z. Namun, ada beberapa aturan penting dalam penamaan objek di R yang harus diperhatikan:

  1. Karakter yang diperbolehkan: kombinasi huruf (a–z, A–Z), angka (0–9), titik (.), atau underscore (_).
  2. Tidak boleh diawali angka → hanya boleh diawali huruf, titik, atau underscore.
  3. Tidak boleh mengandung:
    • Spasi
    • Tab
    • Karakter khusus seperti !, @, #, %, &, dll.
  4. Hindari menggunakan nama bawaan R seperti:
    • Fungsi: c, q, s, t, diff, length, mean, dll.
    • Konstanta/logika: TRUE, FALSE, Inf, NA, NaN, NULL, break, else, for, dll.

Case-Sensitive

ABC <- 5
ABC
## [1] 5
abc <- 3
abc
## [1] 3

Selalu perhatikan huruf besar dan kecil (case-sensitive) karena variabel ABC dan abc itu berbeda.

Working Directory

Working Directory (folder kerja) adalah lokasi atau direktori aktif tempat R menjalankan semua proses saat ini.

Mengecek Working Directory

Untuk mengecek working directory yang sedang digunakan, gunakan fungsi getwd():

getwd()
## [1] "C:/Users/Hype/Belajar R"

Output menampilkan folder kerja yang sedang digunakan.

Mengganti Working Directory

Untuk mengganti working directory, kita dapat menggunakan fungsi setwd():

setwd("C:\\Users\\Hype\\Documents")
getwd()
## [1] "C:/Users/Hype/Documents"

Pada Windows, path folder biasanya ditulis dengan backslash (\). Namun di R, ada dua cara yang benar.

📌 Tips:

  • Gunakan slash (/) agar lebih aman.
  • Jika tetap ingin pakai backslash (\), tulis ganda (\\).
  • Selalu gunakan tanda kutip ” ” untuk path dan nama file.

Mode Objek Data

R memiliki beberapa jenis mode objek dasar (atomic class). Tipe data ini menentukan bagaimana nilai disimpan dan bagaimana R memprosesnya.

Jenis Mode Objek Data

Tipe Data Contoh Nilai Keterangan
character "jokowi", "prabowo", "gibran" Berisi teks atau string
numeric 58, 2.3, 1.2e-2 Bilangan real (desimal)
complex 1.2e6+2i Bilangan kompleks
logical TRUE, FALSE, T, F Nilai logika (benar/salah)

Pembuatan Objek

# Tipe character
Presiden <- "Prabowo"

# Tipe numeric
angka <- 58

# Tipe complex
bilangan_kompleks <- 3 + 2i

# Tipe logical
lulus <- TRUE

Mengecek Tipe Data

# character
class(Presiden)
## [1] "character"
# numeric
class(angka)
## [1] "numeric"
# complex
class(bilangan_kompleks)
## [1] "complex"
# logical
class(lulus)
## [1] "logical"

Perbedaan Numeric dan Integer

Secara default, angka di R dianggap numeric (bilangan real/desimal). Jika ingin membuat integer, tambahkan akhiran L.

A <- 5
y <- 9L
class(A)
## [1] "numeric"
class(y)
## [1] "integer"

Walaupun 5 terlihat seperti bilangan bulat, R tetap menyimpannya sebagai numeric (5.00).

Operasi pada Character (String)

Dalam R, string ditulis dengan tanda kutip (" " atau ' '). Beberapa fungsi penting:

1. Menghitung Jumlah Karakter → nchar()

teks <- "Belajar R itu menyenangkan!"
nchar(teks)
## [1] 27

2. Menggabungkan String → paste() dan paste0()

nama_depan <- "Prabowo"
nama_belakang <- "Subianto"

# Menggabungkan dengan spasi
paste(nama_depan, nama_belakang)
## [1] "Prabowo Subianto"
# Menggabungkan tanpa spasi
paste0(nama_depan, nama_belakang)
## [1] "PrabowoSubianto"

3. Mengambil Bagian dari String → substr() dan substring()

  • substr(teks, start, stop) → ambil karakter dari posisi start sampai stop.
  • substring(teks, first, last) → ambil karakter mulai first sampai last (jika last kosong, sampai akhir).
teks <- "Koperasi Desa Merah Putih"

# Menggunakan substr(): ambil karakter ke-1 sampai ke-8
substr(teks, start = 1, stop = 8)
## [1] "Koperasi"
# Menggunakan substring(): mulai karakter ke-15 sampai akhir
substring(teks, first = 15)
## [1] "Merah Putih"
# substring juga bisa dibatasi sampai indeks tertentu
substring(teks, first = 15, last = 19)
## [1] "Merah"

Struktur Data

Terdapat beberapa tipe objek data standar dalam R, yaitu:

Struktur Data Keterangan
Vector Tipe data paling sederhana, semua elemen memiliki mode yang sama
Factor Vektor dengan elemen berupa kategori
Matrix Vektor berdimensi dua (baris × kolom)
Array Penyimpanan data berdimensi lebih dari dua
Data Frame Menyimpan data berbentuk tabel (baris dan kolom)
List Vektor fleksibel, tiap elemen bisa beda tipe

1. Vector

Vector adalah struktur data paling dasar di R. Semua elemen di dalam vector harus bertipe sama: numerik, karakter, atau logika. Ada tiga fungsi utama untuk membuat vector:

a. c() — Combine

angka <- c(1, 2, 3, 4, 5)      # numerik
nama  <- c("Prabowo", "Teddy") # karakter
lulus <- c(TRUE, FALSE, TRUE)  # logika
angka
## [1] 1 2 3 4 5
nama
## [1] "Prabowo" "Teddy"
lulus
## [1]  TRUE FALSE  TRUE

b. ‘seq()’ - Sequence

bilangan <- seq(1, 10, by = 2)
bilangan
## [1] 1 3 5 7 9

c. ‘rep()’ - Repeat

rep(c(1, 2, 3), times = 2)
## [1] 1 2 3 1 2 3
rep(c(1, 2, 3), each = 2)
## [1] 1 1 2 2 3 3

2.Factor

Factor digunakan untuk menyimpan data kategorik (misalnya tingkat pendidikan, jenis kelamin, kepuasan).

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

Jika ingin level terurut:

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

Factor penting untuk analisis statistik karena R memperlakukan kategori sebagai objek khusus, bukan sekadar string.

Ringkasan Vector dan Factor

Aspek Vektor Karakter Faktor (Unordered) Faktor (Ordered)
Definisi Kumpulan nilai bertipe karakter tanpa atribut tambahan Kumpulan kategori dengan label, tidak ada urutan antar level Kumpulan kategori dengan urutan antar level
Fungsi Pembuat c() factor() factor(..., ordered = TRUE)
Urutan Level Tidak ada urutan Level disimpan tapi tidak terurut Level terurut sesuai argumen
Perbandingan Nilai Tidak bisa dibandingkan (>, < error) Tidak bisa dibandingkan Bisa dibandingkan (SMA > SMP → TRUE)
Kapan Digunakan Menyimpan teks biasa tanpa analisis kategori Data kategorik tanpa hierarki, misalnya warna Data kategorik dengan hierarki, misalnya pendidikan

3. Matrix

Matriks merupakan vektor berdimensi dua (baris dan kolom). Di R, matriks bisa dibentuk menggunakan fungsi matrix(), penggabungan kolom/baris (cbind(), rbind()), atau menambahkan atribut dimensi (dim()).

Membuat Matrix

# Matriks 2x3 (default column-wise)
matriks1 <- matrix(1:6, nrow = 2, ncol = 3)
matriks1
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
# Matriks 2x3 (row-wise)
matriks2 <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)
matriks2
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

Mengakses Elemen

Elemen matriks dapat diakses dengan format [baris, kolom].

matriks4 <- matrix(1:9, nrow = 3, ncol = 3)

# Mengambil elemen baris ke-2 kolom ke-3
matriks4[2, 3]
## [1] 8
# Mengambil seluruh baris pertama
matriks4[1, ]
## [1] 1 4 7
# Mengambil seluruh kolom kedua
matriks4[, 2]
## [1] 4 5 6
# Mengambil baris 1 dan 3
matriks4[c(1, 3), ]
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    3    6    9

Operasi Matrix

Operasi Fungsi/Operator Kegunaan
Transpose t() Menukar baris ↔︎ kolom
Perkalian Matriks %*% Perkalian antar matriks
Matriks Diagonal diag() Membuat matriks diagonal / mengambil elemen diagonal
Invers Matriks solve(A) Menghitung invers matriks persegi
Sistem Persamaan Linear solve(A, b) Menyelesaikan sistem persamaan linear
Nilai & Vektor Eigen eigen(A) Menghitung eigenvalues & eigenvectors

4. Array

Array adalah struktur data yang dapat menampung data multidimensi. Jika matriks hanya memiliki dua dimensi (baris × kolom), maka array bisa memiliki lebih dari dua dimensi.

Array dibuat menggunakan fungsi array(), dengan menentukan data dan bentuk dimensinya melalui argumen dim.

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

# Membuat array 4 x 4 x 3
arr <- array(c(v1, v2), dim = c(4, 4, 3))
arr
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    5   25   45    5
## [2,]   10   30   50   10
## [3,]   15   35   55   15
## [4,]   20   40   60   20
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   25   45    5   25
## [2,]   30   50   10   30
## [3,]   35   55   15   35
## [4,]   40   60   20   40
## 
## , , 3
## 
##      [,1] [,2] [,3] [,4]
## [1,]   45    5   25   45
## [2,]   50   10   30   50
## [3,]   55   15   35   55
## [4,]   60   20   40   60

Karena data v1 dan v2 hanya berjumlah 12 angka sedangkan array membutuhkan 48 elemen, R akan mengulang data secara otomatis (column-wise) hingga semua slot terisi.

Untuk mengecek dimensi array, gunakan fungsi dim():

class(arr)
## [1] "array"
dim(arr)
## [1] 4 4 3

Artinya, objek arr memiliki 4 baris, 4 kolom, dan 3 lapisan.

5. Data Frame

Data frame adalah struktur data dalam R yang digunakan untuk menyimpan data dalam bentuk tabel (baris × kolom). Baris merepresentasikan pengamatan/observasi, sedangkan kolom merepresentasikan peubah/variabel. Tiap kolom dapat memiliki mode berbeda (misalnya satu kolom numerik, kolom lain karakter).

Membuat Data Frame

nama_mhs <- c("Joko", "Gibran", "Ngurah", "Adib")
umur     <- c(24, 25, 24, 24)
jurusan  <- c("Kehutanan", "Manajemen", "Statistika", "Matematika")

df <- data.frame(Nama = nama_mhs, Umur = umur, Jurusan = jurusan)
df
##     Nama Umur    Jurusan
## 1   Joko   24  Kehutanan
## 2 Gibran   25  Manajemen
## 3 Ngurah   24 Statistika
## 4   Adib   24 Matematika

Mengakses Elemen pada Data Frame

Mengakses kolom dengan tanda $:

df$Nama
## [1] "Joko"   "Gibran" "Ngurah" "Adib"

Mengakses dengan indeks, format df[baris, kolom]:

# Mengambil kolom pertama
df[, 1]
## [1] "Joko"   "Gibran" "Ngurah" "Adib"
# Mengambil beberapa kolom
df[, c(1, 3)]
##     Nama    Jurusan
## 1   Joko  Kehutanan
## 2 Gibran  Manajemen
## 3 Ngurah Statistika
## 4   Adib Matematika
# Mengambil baris tertentu
df[2, ]
##     Nama Umur   Jurusan
## 2 Gibran   25 Manajemen
# Mengakses kolom dengan nama sebagai indeks
df[, "Jurusan"]
## [1] "Kehutanan"  "Manajemen"  "Statistika" "Matematika"

6. List

List merupakan bentuk khusus dari vector yang memungkinkan setiap elemennya memiliki tipe data atau struktur yang berbeda-beda. Elemen list dapat berupa vector, matriks, array, data frame, atau bahkan list lainnya.

Membuat List

nama_tunggal  <- "Tedi"
nilai_vec     <- c(65, 55, 70)
matriks_nilai <- matrix(1:6, nrow = 2)

my_list <- list(variabel = nama_tunggal, vector = nilai_vec, matriks = matriks_nilai)
my_list
## $variabel
## [1] "Tedi"
## 
## $vector
## [1] 65 55 70
## 
## $matriks
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

Mengakses Elemen List

# Mengambil isi elemen langsung
my_list[[1]]
## [1] "Tedi"
# Mengambil elemen berdasarkan nama
my_list$vector
## [1] 65 55 70
# Mengambil sebagai list baru
my_list[1]
## $variabel
## [1] "Tedi"

Catatan: [[ ]] mengambil isi elemen secara langsung, sedangkan [ ] mengambil list baru yang berisi elemen tersebut.

Missing Value

Dalam R, ada beberapa nilai khusus yang sering muncul ketika bekerja dengan data atau operasi matematis:

Nilai Khusus Keterangan
NULL Menunjukkan tidak ada nilai atau objek kosong
NA Singkatan dari Not Available; digunakan untuk missing value/data hilang
NaN Singkatan dari Not a Number; muncul akibat operasi matematis yang tidak valid
Inf Singkatan dari Infinity; hasil dari pembagian dengan nol
-Inf Negatif Infinity; biasanya dari pembagian bilangan negatif dengan nol
# Membuat vektor dengan missing value (NA)
x <- c(1, 2, NA, 10, 3)

# Mengecek elemen mana yang NA
is.na(x)
## [1] FALSE FALSE  TRUE FALSE FALSE
nilai_na <- c(10, 20, NA, 30)

# Menjumlahkan elemen (menghasilkan NA)
sum(nilai_na)
## [1] NA

Untuk menghindari hasil NA, banyak fungsi di R memiliki argumen na.rm = TRUE yang artinya “hapus NA sebelum melakukan perhitungan”.

# Menghitung jumlah tanpa menyertakan NA
sum(nilai_na, na.rm = TRUE)
## [1] 60
# Menghitung rata-rata tanpa menyertakan NA
mean(nilai_na, na.rm = TRUE)
## [1] 20

Penamaan Elemen Objek

Selain objek itu sendiri, elemen di dalam suatu objek juga bisa diberi nama agar kode lebih mudah dipahami — baik untuk vector, list, matrix, maupun data frame.

Memberi Nama pada Elemen Vector

kota_vec <- 1:3
names(kota_vec) <- c("Makassar", "Bogor", "Jambi")
kota_vec
## Makassar    Bogor    Jambi 
##        1        2        3

Memberi Nama pada Elemen List

l <- list("A", 1:5)
names(l) <- c("teks", "angka")
l
## $teks
## [1] "A"
## 
## $angka
## [1] 1 2 3 4 5

Memberi Nama Kolom dan Baris pada Matrix

Nama kolom dan baris pada matriks dapat diberikan dengan dimnames(), atau terpisah menggunakan colnames() dan rownames().

m <- matrix(1:4, nrow = 2, ncol = 2)
dimnames(m) <- list(c("Baris1", "Baris2"), c("Kolom1", "Kolom2"))
m
##        Kolom1 Kolom2
## Baris1      1      3
## Baris2      2      4

Memberi Nama Kolom dan Baris pada Data Frame

Nama kolom diberikan dengan names(), dan nama baris dengan row.names().

nilai_df <- c(75, 82, 90, 88)
kota_df  <- c("Bandung", "Bogor", "Jatinangor", "Bekasi")

df2 <- data.frame(nilai_df, kota_df)
names(df2) <- c("Skor", "Kota")
df2
##   Skor       Kota
## 1   75    Bandung
## 2   82      Bogor
## 3   90 Jatinangor
## 4   88     Bekasi

Operator di R

Dalam R, terdapat berbagai macam operator yang digunakan untuk melakukan operasi aritmetika, logika, perbandingan, manipulasi objek, dan penugasan.

Operator Aritmetika

Operator Keterangan Contoh Output
+ Penjumlahan 5 + 3 8
- Pengurangan 5 - 3 2
* Perkalian 5 * 3 15
/ Pembagian 10 / 2 5
^ Pemangkatan 2 ^ 3 8
%% Sisa bagi (modulus) 10 %% 3 1
%/% Pembagian bulat 10 %/% 3 3
%*% Perkalian matriks A %*% B Matriks

Operator Perbandingan

Operator Keterangan Contoh Output
== Sama dengan 5 == 5 TRUE
!= Tidak sama dengan 5 != 3 TRUE
> Lebih besar 5 > 3 TRUE
< Lebih kecil 5 < 3 FALSE
>= Lebih besar sama dengan 5 >= 5 TRUE
<= Lebih kecil sama dengan 3 <= 5 TRUE

Operator Logika

Operator Keterangan Contoh
& AND elementwise c(TRUE, FALSE) & c(TRUE, TRUE)
&& AND tunggal (5 > 3) && (2 < 4)
\| OR elementwise c(TRUE, FALSE) \| c(FALSE, TRUE)
\|\| OR tunggal (5 > 3) \|\| (2 > 4)
! NOT !TRUE

Operator & dan | bekerja per elemen, sedangkan && dan || hanya mengevaluasi elemen pertama (lebih hemat waktu).

Operator Penugasan

Operator Keterangan Contoh
<- Penugasan ke kiri x <- 10
-> Penugasan ke kanan 10 -> x
= Alternatif assign x = 10
<<- Penugasan global x <<- 5

Operator Lain

Operator Keterangan Contoh
$ Mengakses elemen list/data frame df$kolom1
[ Mengambil subset x[1:3]
[[ Mengambil elemen tunggal list[[2]]
: Urutan angka 1:5 → 1 2 3 4 5
~ Formula statistik y ~ x

Struktur Kendali

Struktur kendali digunakan untuk mengatur alur eksekusi program berdasarkan kondisi tertentu atau perulangan proses. Dalam R, struktur kendali dibagi menjadi dua kelompok utama: percabangan (conditional statements) dan perulangan (loops).

Percabangan

if

Digunakan untuk mengeksekusi kode jika kondisi bernilai TRUE. Bentuk umum: if (expression) { statement }.

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

Jika kondisi bernilai FALSE, maka tidak ada perintah yang dieksekusi.

if else

Digunakan untuk mengeksekusi salah satu dari dua blok kode berdasarkan kondisi. Bentuk umum: if (expression) { statement1 } else { statement2 }.

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

if else if

Digunakan untuk memeriksa beberapa kondisi secara berurutan. Bentuk umum: if (kondisi1) { statement1 } else if (kondisi2) { statement2 } else if (kondisi3) { statement3 }.

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

Perulangan (Loops)

Perulangan digunakan untuk menjalankan blok kode secara berulang sampai kondisi tertentu tercapai. Dalam R terdapat tiga jenis utama perulangan: for, while, dan repeat, ditambah perintah break dan next untuk mengontrol prosesnya.

for loop

Digunakan untuk mengiterasi elemen dalam sebuah vektor atau urutan tertentu. Bentuk umum: for (val in sequence) { statement }.

angka_for <- c(2, 5, 8, 11, 14)
total <- 0
for (nilai in angka_for) {
  total <- total + nilai
}
print(paste("Total penjumlahan:", total))
## [1] "Total penjumlahan: 40"

while loop

Digunakan untuk menjalankan perintah selama kondisi tertentu masih TRUE. Bentuk umum: while (kondisi) { statement }.

i <- 1
while (i <= 5) {
  print(paste("Iterasi ke-", i))
  i <- i + 1
}
## [1] "Iterasi ke- 1"
## [1] "Iterasi ke- 2"
## [1] "Iterasi ke- 3"
## [1] "Iterasi ke- 4"
## [1] "Iterasi ke- 5"

break dan next

break menghentikan perulangan sepenuhnya dan keluar dari loop, sedangkan next melewati iterasi saat ini dan langsung melanjutkan ke iterasi berikutnya.

# Melewati angka ganjil dan hanya mencetak angka genap
for (i in 1:10) {
  if (i %% 2 != 0) {
    next  # Lewati angka ganjil
  }
  print(paste("Angka genap:", i))
}
## [1] "Angka genap: 2"
## [1] "Angka genap: 4"
## [1] "Angka genap: 6"
## [1] "Angka genap: 8"
## [1] "Angka genap: 10"

repeat loop

Digunakan untuk menjalankan perintah tanpa batas sampai ada perintah break. Bentuk umum: repeat { statement; if (kondisi) { break } }.

x_rep <- 1
repeat {
  print(x_rep)
  x_rep <- x_rep + 1
  if (x_rep > 5) {
    break
  }
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5