# ==============================================================================
# BAB 2: FUNGSI DASAR DALAM R
# Buku: Belajar Statistika dengan R (Gio & Irawan, 2016)
# ==============================================================================
# 1. Menyimpan Data dalam Variabel (Fungsi c) & Mengeksekusi Kode
simpan <- c(10, 20, 40, 15, 40)
simpan
## [1] 10 20 40 15 40
# Mengubah nilai variabel simpan
simpan <- c(1000, 2000, 3000, 4000, 5000)
simpan
## [1] 1000 2000 3000 4000 5000
# 2. Mengakses Nilai Data dalam Variabel secara Individual
simpan <- c(10, 20, 40, 15, 40)

# Mengakses elemen pada posisi ke-3
simpan[3]
## [1] 40
# Mengakses elemen pada posisi ke-4
simpan[4]
## [1] 15
# Mengakses elemen pada posisi 1, 3, dan 4
simpan[c(1, 3, 4)]
## [1] 10 40 15
# Mengakses elemen dari posisi 2 sampai 4
simpan[2:4]
## [1] 20 40 15
# 3. Mengubah Nilai Data dalam Variabel
simpan[3] <- 100
simpan[4] <- 10000
simpan
## [1]    10    20   100 10000    40
# 4. Menghapus Nilai Data dalam Variabel
# Inisialisasi awal variabel NILAI
NILAI <- c(10, 40, 45, 30, 80)
NILAI
## [1] 10 40 45 30 80
# Menghapus elemen ke-3 (nilai 45)
NILAI <- NILAI[-3]
NILAI
## [1] 10 40 30 80
# Menghapus elemen ke-4
NILAI <- NILAI[-4]
NILAI
## [1] 10 40 30
# Menghapus elemen ke-1 dan ke-3 sekaligus (reset ulang dulu data NILAI)
NILAI <- c(10, 40, 45, 30, 80)
NILAI <- NILAI[c(-1, -3)]
NILAI
## [1] 40 30 80
# 5. Penggunaan Operator Logika: >, <, &, |
# Inisialisasi ulang variabel NILAI agar siap digunakan pada pengujian logika
NILAI <- c(100, 95, 70, 80, 25, 60, 80, 60, 55, 90)
NILAI
##  [1] 100  95  70  80  25  60  80  60  55  90
# Operator > (Lebih Besar Dari 80)
NILAI[NILAI > 80]
## [1] 100  95  90
# Operator < (Lebih Kecil Dari 70)
NILAI[NILAI < 70]
## [1] 25 60 60 55
# Operator & (Dan: Lebih besar dari 60 DAN lebih kecil dari 80)
NILAI[NILAI > 60 & NILAI < 80]
## [1] 70
# Operator | (Atau: Lebih besar dari 80 ATAU lebih kecil dari 30)
NILAI[NILAI > 80 | NILAI < 30]
## [1] 100  95  25  90
# Menghapus nilai yang >= 75 (menyimpan nilai < 75)
NILAI_kecil75 <- NILAI[NILAI < 75]
NILAI_kecil75
## [1] 70 25 60 60 55
# Menghapus nilai yang <= 90 (menyimpan nilai > 90)
NILAI_besar90 <- NILAI[NILAI > 90]
NILAI_besar90
## [1] 100  95
# 6. Contoh Sederhana Pemrograman (Fungsi dan Perulangan)
# Membuat fungsi untuk menambah +10 pada elemen yang nilainya < 65
fungsi <- function(x) {
  for (i in 1:length(x)) {
    if (x[i] < 65) {
      x[i] <- x[i] + 10
    }
    print(x[i])
  }
}

A <- c(100, 95, 70, 80, 25, 60, 80, 60, 55, 90)
fungsi(A)
## [1] 100
## [1] 95
## [1] 70
## [1] 80
## [1] 35
## [1] 70
## [1] 80
## [1] 70
## [1] 65
## [1] 90
# 7. Tipe/Jenis Data dalam R (mode)
# Numeric
mode(1000)
## [1] "numeric"
simpan_num <- c(1000)
mode(simpan_num)
## [1] "numeric"
# Character
mode("HALO")
## [1] "character"
simpan_char <- c("HALO")
mode(simpan_char)
## [1] "character"
# Logical
d <- c(FALSE)
a <- c(TRUE)
mode(d)
## [1] "logical"
mode(a)
## [1] "logical"
# Function
kuadrat <- function(x) {
  print(x * x)
}
A_val <- c(4)
kuadrat(A_val)
## [1] 16
mode(kuadrat)
## [1] "function"
# 8. Operator Matematika Dasar (+, -, *, /, ^, %%)
A <- c(1, 2, 3)
B <- c(4, 5, 6)
C <- A + B
C
## [1] 5 7 9
B_tambah <- 2 + A
B_tambah
## [1] 3 4 5
A <- c(2, 4, 6)
B <- c(1, 3, 5)
B - A
## [1] -1 -1 -1
A <- c(4, 8, 12)
A * 0.5
## [1] 2 4 6
A <- c(4, 8, 12)
B <- c(2, 2, 2)
A / B
## [1] 2 4 6
A <- c(3, 6, 1)
B <- c(2, 2, 0)
A ^ B
## [1]  9 36  1
A <- c(5, 2, 7)
B <- c(3, 2, 6)
C <- A %% B
C
## [1] 2 0 1
# 9. Fungsi Matematika & Statistik Dasar R
# Fungsi length (Jumlah elemen)
A <- c(100, 70, 80, 55, 80, 70, 80)
length(A)
## [1] 7
# Fungsi sort (Mengurutkan data)
A <- c(70, 80, 50, 25, 100, 60)
sort(A)
## [1]  25  50  60  70  80 100
# Fungsi diff (Selisih antar elemen berurutan)
A <- c(100, 50, 70, 80, 60)
diff(A)
## [1] -50  20  10 -20
# Fungsi sum (Penjumlahan total)
A <- c(50, 60, 70, 80)
sum(A)
## [1] 260
# Fungsi sqrt (Akar pangkat dua)
a <- sqrt(81)
a
## [1] 9
b <- sqrt(a)
b
## [1] 3
# Fungsi max dan min
A <- c(10, 25, 90, 75, 95, 57)
max(A)
## [1] 95
min(A)
## [1] 10
# Fungsi exp (Eksponensial e)
exp(1)
## [1] 2.718282
exp(2)
## [1] 7.389056
# Fungsi pi (Konstanta pi)
pi
## [1] 3.141593
# Fungsi options (Mengatur tampilan digit desimal)
options(digits = 3)
pi
## [1] 3.14
options(digits = 10)
pi
## [1] 3.141592654
# 10. Fungsi seq (Deret Angka)
seq(from = 1, to = 10)
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(from = 2, by = 0.5, length.out = 4)
## [1] 2.0 2.5 3.0 3.5
seq(2, 30, 3)
##  [1]  2  5  8 11 14 17 20 23 26 29
# Membuat urutan kustom dengan fungsi perulangan
panggil <- function(x, y, z) {
  a <- x
  print(a)
  for (i in x:z) {
    a <- a + y
    if (a > z) {
      break
    }
    print(a)
  }
}
panggil(2, 3, 30)
## [1] 2
## [1] 5
## [1] 8
## [1] 11
## [1] 14
## [1] 17
## [1] 20
## [1] 23
## [1] 26
## [1] 29
# 11. Fungsi table & factor
# Fungsi table (Tabel Frekuensi)
A <- c(10, 10, 30, 10, 30, 10, 10, 40, 40, 70, 90, 70, 80, 60, 60, 90)
table(A)
## A
## 10 30 40 60 70 80 90 
##  5  2  2  2  2  1  2
table(A) / length(A) # Tabel Proporsi
## A
##     10     30     40     60     70     80     90 
## 0.3125 0.1250 0.1250 0.1250 0.1250 0.0625 0.1250
hasil <- c("ya", "tidak", "ya", "ya", "ya", "ya", "tidak", "ya", "tidak", "ya")
table(hasil)
## hasil
## tidak    ya 
##     3     7
table(hasil) / length(hasil)
## hasil
## tidak    ya 
##   0.3   0.7
# Fungsi factor (Mengecek level/kategori data)
A_factor1 <- c("ikan", "ikan", "udang", "ikan", "udang", "ikan", "ikan", "udang")
factor(A_factor1)
## [1] ikan  ikan  udang ikan  udang ikan  ikan  udang
## Levels: ikan udang
A_factor2 <- c("sarjana", "diploma", "sarjana", "pengangguran", "sarjana", "diploma", "diploma", "pengangguran")
factor(A_factor2)
## [1] sarjana      diploma      sarjana      pengangguran sarjana     
## [6] diploma      diploma      pengangguran
## Levels: diploma pengangguran sarjana
# 12. Visualisasi Dasar: Fungsi barplot & plot
# Diagram Batang (barplot)
A <- c(10, 10, 10, 10, 20, 20, 30, 30, 30, 30, 30, 30)
barplot(table(A))

barplot(table(A) / length(A)) # Barplot proporsi

# Grafik Titik / Sebaran (plot)
A <- c(10, 10, 10, 10, 10, 20, 20, 20, 30, 30, 40)
table(A)
## A
## 10 20 30 40 
##  5  3  2  1
nilai_plot <- c(10, 20, 30, 40)
frekuensi <- c(5, 3, 2, 1)
plot(nilai_plot, frekuensi)

# Plot langsung dari objek table
plot(table(A))