judul <- function(teks) cat("\n====", teks, "====\n")

# 1. OUTPUT & KOMENTAR
judul("1. OUTPUT")
## 
## ==== 1. OUTPUT ====
print("Halo, R!")
## [1] "Halo, R!"
cat("Belajar", "R", "itu", "seru\n")
## Belajar R itu seru
cat("Baris 1\nBaris 2\n")
## Baris 1
## Baris 2
message("Ini pesan (keluar di stderr)")
## Ini pesan (keluar di stderr)
print(paste("Gabung", "string", sep = "-"))
## [1] "Gabung-string"
print(paste0("Tanpa", "spasi"))
## [1] "Tanpaspasi"
print(sprintf("Nama: %s, Umur: %d, IPK: %.2f", "Fauzan", 21L, 3.75))
## [1] "Nama: Fauzan, Umur: 21, IPK: 3.75"
format(1234567.891, big.mark = ",", nsmall = 2)
## [1] "1,234,567.89"
# 2. VARIABEL & TIPE DATA
judul("2. VARIABEL & TIPE DATA")
## 
## ==== 2. VARIABEL & TIPE DATA ====
x <- 10            # numeric
y <- 5L            # integer
z <- "teks"        # character
b <- TRUE          # logical
k <- 3 + 2i        # complex
r <- charToRaw("A")# raw

print(class(x)); print(class(y)); print(class(z))
## [1] "numeric"
## [1] "integer"
## [1] "character"
print(class(b)); print(class(k)); print(class(r))
## [1] "logical"
## [1] "complex"
## [1] "raw"
print(typeof(x)); print(is.numeric(x)); print(is.character(z))
## [1] "double"
## [1] TRUE
## [1] TRUE
# konversi tipe
as.integer("12")
## [1] 12
as.numeric("3.14")
## [1] 3.14
as.character(100)
## [1] "100"
as.logical("TRUE")
## [1] TRUE
as.logical(0)
## [1] FALSE
# nilai khusus
NA; NULL; NaN; Inf; -Inf
## [1] NA
## NULL
## [1] NaN
## [1] Inf
## [1] -Inf
is.na(NA); is.null(NULL); is.nan(NaN); is.finite(10)
## [1] TRUE
## [1] TRUE
## [1] TRUE
## [1] TRUE
# assign & get
assign("var_dinamis", 99)
get("var_dinamis")
## [1] 99
ls()                 # daftar objek di environment
## [1] "b"           "judul"       "k"           "r"           "var_dinamis"
## [6] "x"           "y"           "z"
rm(var_dinamis)      # hapus objek

# 3. OPERATOR
judul("3. OPERATOR")
## 
## ==== 3. OPERATOR ====
a <- 17; c2 <- 5
cat("Tambah  :", a + c2, "\n")
## Tambah  : 22
cat("Kurang  :", a - c2, "\n")
## Kurang  : 12
cat("Kali    :", a * c2, "\n")
## Kali    : 85
cat("Bagi    :", a / c2, "\n")
## Bagi    : 3.4
cat("Pangkat :", a ^ 2, "\n")
## Pangkat : 289
cat("Modulus :", a %% c2, "\n")
## Modulus : 2
cat("Bagi int:", a %/% c2, "\n")
## Bagi int: 3
# perbandingan
a == c2; a != c2; a > c2; a < c2; a >= c2; a <= c2
## [1] FALSE
## [1] TRUE
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] FALSE
# logika
TRUE & FALSE; TRUE | FALSE; !TRUE
## [1] FALSE
## [1] TRUE
## [1] FALSE
xor(TRUE, FALSE)
## [1] TRUE
isTRUE(TRUE)
## [1] TRUE
any(c(TRUE, FALSE)); all(c(TRUE, FALSE))
## [1] TRUE
## [1] FALSE
# %in%
3 %in% c(1, 2, 3)
## [1] TRUE
# 4. VECTOR
judul("4. VECTOR")
## 
## ==== 4. VECTOR ====
v <- c(5, 3, 8, 1, 9, 2)
print(v)
## [1] 5 3 8 1 9 2
print(length(v))
## [1] 6
print(v[2])            # elemen ke-2
## [1] 3
print(v[c(1, 3)])      # elemen 1 dan 3
## [1] 5 8
print(v[-1])           # kecuali elemen 1
## [1] 3 8 1 9 2
print(v[v > 4])        # filter kondisi
## [1] 5 8 9
print(sort(v))
## [1] 1 2 3 5 8 9
print(sort(v, decreasing = TRUE))
## [1] 9 8 5 3 2 1
print(order(v))
## [1] 4 6 2 1 3 5
print(rev(v))
## [1] 2 9 1 8 3 5
print(which(v > 4))
## [1] 1 3 5
print(which.max(v)); print(which.min(v))
## [1] 5
## [1] 4
print(v * 2)
## [1] 10  6 16  2 18  4
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(1, 10, by = 2)
## [1] 1 3 5 7 9
seq(0, 1, length.out = 5)
## [1] 0.00 0.25 0.50 0.75 1.00
rep(c("a", "b"), times = 3)
## [1] "a" "b" "a" "b" "a" "b"
rep(c("a", "b"), each = 2)
## [1] "a" "a" "b" "b"
append(v, 100, after = 2)
## [1]   5   3 100   8   1   9   2
head(v, 3); tail(v, 3)
## [1] 5 3 8
## [1] 1 9 2
unique(c(1, 1, 2, 3, 3))
## [1] 1 2 3
duplicated(c(1, 1, 2, 3, 3))
## [1] FALSE  TRUE FALSE FALSE  TRUE
cumsum(v); cumprod(1:5)
## [1]  5  8 16 17 26 28
## [1]   1   2   6  24 120
diff(v)
## [1] -2  5 -7  8 -7
names(v) <- letters[1:6]
print(v)
## a b c d e f 
## 5 3 8 1 9 2
# 5. MATRIX
judul("5. MATRIX")
## 
## ==== 5. MATRIX ====
m <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE)
print(m)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
dim(m); nrow(m); ncol(m)
## [1] 3 3
## [1] 3
## [1] 3
m[2, 3]; m[1, ]; m[, 2]
## [1] 6
## [1] 1 2 3
## [1] 2 5 8
t(m)                       # transpose
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
m %*% m                    # perkalian matriks
##      [,1] [,2] [,3]
## [1,]   30   36   42
## [2,]   66   81   96
## [3,]  102  126  150
m * 2                      # perkalian elemen
##      [,1] [,2] [,3]
## [1,]    2    4    6
## [2,]    8   10   12
## [3,]   14   16   18
diag(3)                    # matriks identitas
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
det(matrix(c(2, 1, 1, 3), 2))
## [1] 5
solve(matrix(c(2, 1, 1, 3), 2))   # invers
##      [,1] [,2]
## [1,]  0.6 -0.2
## [2,] -0.2  0.4
rbind(m, 10:12)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12
cbind(m, c(0, 0, 0))
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    0
## [2,]    4    5    6    0
## [3,]    7    8    9    0
rowSums(m); colSums(m); rowMeans(m); colMeans(m)
## [1]  6 15 24
## [1] 12 15 18
## [1] 2 5 8
## [1] 4 5 6
rownames(m) <- c("A", "B", "C")
colnames(m) <- c("X", "Y", "Z")
print(m)
##   X Y Z
## A 1 2 3
## B 4 5 6
## C 7 8 9
# 6. ARRAY
judul("6. ARRAY")
## 
## ==== 6. ARRAY ====
arr <- array(1:24, dim = c(3, 4, 2))
print(arr)
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
arr[2, 3, 1]
## [1] 8
dim(arr)
## [1] 3 4 2
# 7. LIST
judul("7. LIST")
## 
## ==== 7. LIST ====
lst <- list(nama = "Fauzan", umur = 21, hobi = c("coding", "gaming"),
            nilai = list(R = 90, Python = 85))
print(lst)
## $nama
## [1] "Fauzan"
## 
## $umur
## [1] 21
## 
## $hobi
## [1] "coding" "gaming"
## 
## $nilai
## $nilai$R
## [1] 90
## 
## $nilai$Python
## [1] 85
lst$nama
## [1] "Fauzan"
lst[["umur"]]
## [1] 21
lst$hobi[2]
## [1] "gaming"
lst$nilai$R
## [1] 90
lst$kampus <- "UNMUL"      # tambah elemen
lst$umur <- NULL           # hapus elemen
names(lst)
## [1] "nama"   "hobi"   "nilai"  "kampus"
length(lst)
## [1] 4
str(lst)
## List of 4
##  $ nama  : chr "Fauzan"
##  $ hobi  : chr [1:2] "coding" "gaming"
##  $ nilai :List of 2
##   ..$ R     : num 90
##   ..$ Python: num 85
##  $ kampus: chr "UNMUL"
unlist(list(a = 1, b = 2, c = 3))
## a b c 
## 1 2 3
# 8. DATA FRAME
judul("8. DATA FRAME")
## 
## ==== 8. DATA FRAME ====
df <- data.frame(
  nama  = c("Ani", "Budi", "Citra", "Dedi", "Eka"),
  umur  = c(20, 21, 19, 22, 20),
  nilai = c(85, 90, 78, 88, 95),
  stringsAsFactors = FALSE
)
print(df)
##    nama umur nilai
## 1   Ani   20    85
## 2  Budi   21    90
## 3 Citra   19    78
## 4  Dedi   22    88
## 5   Eka   20    95
str(df)
## 'data.frame':    5 obs. of  3 variables:
##  $ nama : chr  "Ani" "Budi" "Citra" "Dedi" ...
##  $ umur : num  20 21 19 22 20
##  $ nilai: num  85 90 78 88 95
summary(df)
##         nama        umur          nilai     
##  Length   :5   Min.   :19.0   Min.   :78.0  
##  N.unique :5   1st Qu.:20.0   1st Qu.:85.0  
##  N.blank  :0   Median :20.0   Median :88.0  
##  Min.nchar:3   Mean   :20.4   Mean   :87.2  
##  Max.nchar:5   3rd Qu.:21.0   3rd Qu.:90.0  
##                Max.   :22.0   Max.   :95.0
dim(df); nrow(df); ncol(df)
## [1] 5 3
## [1] 5
## [1] 3
names(df); colnames(df)
## [1] "nama"  "umur"  "nilai"
## [1] "nama"  "umur"  "nilai"
head(df, 3); tail(df, 2)
##    nama umur nilai
## 1   Ani   20    85
## 2  Budi   21    90
## 3 Citra   19    78
##   nama umur nilai
## 4 Dedi   22    88
## 5  Eka   20    95
df$nama
## [1] "Ani"   "Budi"  "Citra" "Dedi"  "Eka"
df[2, ]
##   nama umur nilai
## 2 Budi   21    90
df[, "nilai"]
## [1] 85 90 78 88 95
df[df$nilai > 85, ]
##   nama umur nilai
## 2 Budi   21    90
## 4 Dedi   22    88
## 5  Eka   20    95
subset(df, umur > 19, select = c(nama, nilai))
##   nama nilai
## 1  Ani    85
## 2 Budi    90
## 4 Dedi    88
## 5  Eka    95
df$lulus <- ifelse(df$nilai >= 80, "Lulus", "Remedial")
df[order(-df$nilai), ]
##    nama umur nilai    lulus
## 5   Eka   20    95    Lulus
## 2  Budi   21    90    Lulus
## 4  Dedi   22    88    Lulus
## 1   Ani   20    85    Lulus
## 3 Citra   19    78 Remedial
df <- rbind(df, data.frame(nama = "Fani", umur = 21, nilai = 82, lulus = "Lulus"))
df <- df[, c("nama", "umur", "nilai")]       # pilih kolom
mean(df$nilai)
## [1] 86.33333
aggregate(nilai ~ umur, data = df, FUN = mean)
##   umur nilai
## 1   19    78
## 2   20    90
## 3   21    86
## 4   22    88
table(df$umur)
## 
## 19 20 21 22 
##  1  2  2  1
with(df, tapply(nilai, umur, mean))
## 19 20 21 22 
## 78 90 86 88
# merge
df2 <- data.frame(nama = c("Ani", "Budi", "Citra"),
                  jurusan = c("IF", "SI", "TI"))
merge(df, df2, by = "nama")
##    nama umur nilai jurusan
## 1   Ani   20    85      IF
## 2  Budi   21    90      SI
## 3 Citra   19    78      TI
# 9. FACTOR
judul("9. FACTOR")
## 
## ==== 9. FACTOR ====
gender <- factor(c("L", "P", "P", "L", "P"), levels = c("L", "P"),
                 labels = c("Laki-laki", "Perempuan"))
print(gender)
## [1] Laki-laki Perempuan Perempuan Laki-laki Perempuan
## Levels: Laki-laki Perempuan
levels(gender)
## [1] "Laki-laki" "Perempuan"
table(gender)
## gender
## Laki-laki Perempuan 
##         2         3
as.integer(gender)
## [1] 1 2 2 1 2
nlevels(gender)
## [1] 2
# 10. STRING
judul("10. STRING")
## 
## ==== 10. STRING ====
s <- "Belajar Bahasa R itu Menyenangkan"
nchar(s)
## [1] 33
toupper(s); tolower(s)
## [1] "BELAJAR BAHASA R ITU MENYENANGKAN"
## [1] "belajar bahasa r itu menyenangkan"
substr(s, 1, 7)
## [1] "Belajar"
strsplit(s, " ")[[1]]
## [1] "Belajar"      "Bahasa"       "R"            "itu"          "Menyenangkan"
gsub("R", "Python", s)
## [1] "Belajar Bahasa Python itu Menyenangkan"
sub("a", "A", s)
## [1] "BelAjar Bahasa R itu Menyenangkan"
grepl("Bahasa", s)
## [1] TRUE
grep("a", c("apel", "jeruk", "mangga"))
## [1] 1 3
regmatches(s, regexpr("[A-Z]\\w+", s))
## [1] "Belajar"
trimws("   spasi   ")
## [1] "spasi"
sprintf("%05d", 42)
## [1] "00042"
rev(strsplit("R", "")[[1]])
## [1] "R"
paste(rev(strsplit("kasur", "")[[1]]), collapse = "")   # balik string
## [1] "rusak"
startsWith(s, "Belajar"); endsWith(s, "an")
## [1] TRUE
## [1] TRUE
casefold("ABC", upper = FALSE)
## [1] "abc"
chartr("abc", "xyz", "aabbcc")
## [1] "xxyyzz"
toString(1:5)
## [1] "1, 2, 3, 4, 5"
format(Sys.Date(), "%d-%m-%Y")
## [1] "26-10-2026"
# 11. MATEMATIKA & STATISTIK
judul("11. MATEMATIKA & STATISTIK")
## 
## ==== 11. MATEMATIKA & STATISTIK ====
abs(-5); sqrt(16); exp(1); log(10); log10(100); log2(8); log(8, base = 2)
## [1] 5
## [1] 4
## [1] 2.718282
## [1] 2.302585
## [1] 2
## [1] 3
## [1] 3
round(3.14159, 2); ceiling(3.2); floor(3.8); trunc(-3.8); signif(123456, 2)
## [1] 3.14
## [1] 4
## [1] 3
## [1] -3
## [1] 120000
sin(pi / 2); cos(0); tan(pi / 4)
## [1] 1
## [1] 1
## [1] 1
factorial(5); choose(5, 2)
## [1] 120
## [1] 10
max(v); min(v); range(v)
## [1] 9
## [1] 1
## [1] 1 9
sum(v); prod(1:5)
## [1] 28
## [1] 120
data_stat <- c(12, 15, 11, 18, 20, 15, 13, 17, 15, 14)
mean(data_stat)
## [1] 15
median(data_stat)
## [1] 15
var(data_stat)
## [1] 7.555556
sd(data_stat)
## [1] 2.748737
quantile(data_stat)
##    0%   25%   50%   75%  100% 
## 11.00 13.25 15.00 16.50 20.00
summary(data_stat)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   11.00   13.25   15.00   15.00   16.50   20.00
cor(c(1, 2, 3, 4, 5), c(2, 4, 5, 4, 5))
## [1] 0.7745967
scale(data_stat)[1:3]
## [1] -1.091410  0.000000 -1.455214
modus <- function(x) {
  u <- unique(x)
  u[which.max(tabulate(match(x, u)))]
}
modus(data_stat)
## [1] 15
# 12. PERCABANGAN
judul("12. PERCABANGAN")
## 
## ==== 12. PERCABANGAN ====
nilai <- 82
if (nilai >= 85) {
  print("Grade A")
} else if (nilai >= 70) {
  print("Grade B")
} else {
  print("Grade C")
}
## [1] "Grade B"
ifelse(nilai >= 75, "Lulus", "Tidak Lulus")
## [1] "Lulus"
hari <- "Senin"
hasil <- switch(hari,
                "Senin" = "Awal pekan",
                "Jumat" = "Akhir pekan kerja",
                "Hari biasa")
print(hasil)
## [1] "Awal pekan"
# 13. PERULANGAN
judul("13. PERULANGAN")
## 
## ==== 13. PERULANGAN ====
for (i in 1:5) cat("for i =", i, "\n")
## for i = 1 
## for i = 2 
## for i = 3 
## for i = 4 
## for i = 5
j <- 1
while (j <= 3) {
  cat("while j =", j, "\n")
  j <- j + 1
}
## while j = 1 
## while j = 2 
## while j = 3
n <- 0
repeat {
  n <- n + 1
  if (n == 2) next      # lewati
  if (n > 4) break      # berhenti
  cat("repeat n =", n, "\n")
}
## repeat n = 1 
## repeat n = 3 
## repeat n = 4
for (buah in c("apel", "jeruk", "mangga")) print(buah)
## [1] "apel"
## [1] "jeruk"
## [1] "mangga"
seq_along(c("a", "b", "c"))
## [1] 1 2 3
# 14. FUNGSI
judul("14. FUNGSI")
## 
## ==== 14. FUNGSI ====
kuadrat <- function(x) x^2
print(kuadrat(7))
## [1] 49
luas_persegi_panjang <- function(p, l = 1) {
  return(p * l)
}
print(luas_persegi_panjang(4, 5))
## [1] 20
print(luas_persegi_panjang(4))
## [1] 4
hitung <- function(...) {
  args <- c(...)
  list(jumlah = sum(args), rata2 = mean(args))
}
str(hitung(1, 2, 3, 4))
## List of 2
##  $ jumlah: num 10
##  $ rata2 : num 2.5
faktorial_rekursif <- function(n) if (n <= 1) 1 else n * faktorial_rekursif(n - 1)
print(faktorial_rekursif(6))
## [1] 720
fibonacci <- function(n) {
  f <- numeric(n); f[1:2] <- 1
  for (i in 3:n) f[i] <- f[i - 1] + f[i - 2]
  f
}
print(fibonacci(10))
##  [1]  1  1  2  3  5  8 13 21 34 55
(function(x) x + 1)(5)        # fungsi anonim
## [1] 6
sapply(1:5, function(x) x * 2)
## [1]  2  4  6  8 10
# 15. APPLY FAMILY & FUNCTIONAL
judul("15. APPLY FAMILY")
## 
## ==== 15. APPLY FAMILY ====
mat <- matrix(1:6, nrow = 2)
apply(mat, 1, sum)                  # per baris
## [1]  9 12
apply(mat, 2, sum)                  # per kolom
## [1]  3  7 11
lapply(1:3, function(x) x^2)        # hasil list
## [[1]]
## [1] 1
## 
## [[2]]
## [1] 4
## 
## [[3]]
## [1] 9
sapply(1:3, function(x) x^2)        # hasil vector
## [1] 1 4 9
vapply(1:3, function(x) x^2, numeric(1))
## [1] 1 4 9
mapply(function(a, b) a + b, 1:3, 4:6)
## [1] 5 7 9
Map(function(a, b) a * b, 1:3, 4:6)
## [[1]]
## [1] 4
## 
## [[2]]
## [1] 10
## 
## [[3]]
## [1] 18
Reduce(`+`, 1:5)
## [1] 15
Filter(function(x) x %% 2 == 0, 1:10)
## [1]  2  4  6  8 10
tapply(c(10, 20, 30, 40), c("a", "b", "a", "b"), sum)
##  a  b 
## 40 60
do.call(rbind, list(1:3, 4:6))
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
# 16. INPUT DARI USER
judul("16. INPUT")
## 
## ==== 16. INPUT ====
if (interactive()) {
  nama_input <- readline(prompt = "Masukkan nama: ")
  cat("Halo,", nama_input, "\n")
} else {
  cat("(readline() hanya jalan di mode interaktif / RStudio)\n")
}
## (readline() hanya jalan di mode interaktif / RStudio)
# 17. TANGGAL & WAKTU
judul("17. TANGGAL & WAKTU")
## 
## ==== 17. TANGGAL & WAKTU ====
Sys.Date()
## [1] "2026-10-26"
Sys.time()
## [1] "2026-10-26 13:50:07 AWST"
tgl <- as.Date("2026-10-26")
format(tgl, "%A, %d %B %Y")
## [1] "Monday, 26 October 2026"
tgl + 30
## [1] "2026-11-25"
as.numeric(as.Date("2026-12-31") - tgl)
## [1] 66
seq(tgl, by = "month", length.out = 3)
## [1] "2026-10-26" "2026-11-26" "2026-12-26"
weekdays(tgl); months(tgl)
## [1] "Monday"
## [1] "October"
# 18. BACA/TULIS FILE
judul("18. FILE I/O")
## 
## ==== 18. FILE I/O ====
file_csv <- tempfile(fileext = ".csv")
write.csv(df, file_csv, row.names = FALSE)
data_baca <- read.csv(file_csv)
print(data_baca)
##    nama umur nilai
## 1   Ani   20    85
## 2  Budi   21    90
## 3 Citra   19    78
## 4  Dedi   22    88
## 5   Eka   20    95
## 6  Fani   21    82
file_txt <- tempfile(fileext = ".txt")
writeLines(c("baris satu", "baris dua", "baris tiga"), file_txt)
readLines(file_txt)
## [1] "baris satu" "baris dua"  "baris tiga"
file.exists(file_csv)
## [1] TRUE
saveRDS(df, tempfile(fileext = ".rds"))
unlink(c(file_csv, file_txt))
getwd()
## [1] "C:/Users/HP/Documents"
# 19. ERROR HANDLING
judul("19. ERROR HANDLING")
## 
## ==== 19. ERROR HANDLING ====
hasil <- tryCatch({
  log(-1)
}, warning = function(w) {
  cat("Warning:", conditionMessage(w), "\n"); NA
}, error = function(e) {
  cat("Error:", conditionMessage(e), "\n"); NA
}, finally = {
  cat("Selesai tryCatch\n")
})
## Warning: NaNs produced 
## Selesai tryCatch
tryCatch(stop("Error buatan sendiri"),
         error = function(e) cat("Tertangkap:", conditionMessage(e), "\n"))
## Tertangkap: Error buatan sendiri
try(sqrt("a"), silent = TRUE)
stopifnot(is.numeric(5))

# 20. RANDOM & SAMPLING
judul("20. RANDOM")
## 
## ==== 20. RANDOM ====
set.seed(123)
runif(3)                         # uniform
## [1] 0.2875775 0.7883051 0.4089769
rnorm(3, mean = 0, sd = 1)       # normal
## [1]  1.190207 -1.689556  1.239496
sample(1:10, 5)                  # tanpa pengembalian
## [1] 5 4 6 8 1
sample(c("H", "T"), 5, replace = TRUE)
## [1] "T" "H" "T" "H" "H"
rbinom(5, 10, 0.5)
## [1] 8 7 6 6 9
# 21. GRAFIK DASAR
judul("21. GRAFIK")
## 
## ==== 21. GRAFIK ====
png("grafik_dasar.png", width = 1000, height = 800)
par(mfrow = c(2, 2))
plot(1:10, (1:10)^2, type = "b", col = "blue", main = "Line Plot",
     xlab = "x", ylab = "x^2")
barplot(c(A = 5, B = 8, C = 3), col = c("red", "green", "blue"),
        main = "Bar Plot")
hist(rnorm(200), col = "skyblue", main = "Histogram", xlab = "Nilai")
boxplot(nilai ~ umur, data = df, col = "orange", main = "Boxplot")
dev.off()
## png 
##   2
cat("Grafik tersimpan di grafik_dasar.png\n")
## Grafik tersimpan di grafik_dasar.png
# 22. LAIN-LAIN
judul("22. LAIN-LAIN")
## 
## ==== 22. LAIN-LAIN ====
is.function(print)
## [1] TRUE
exists("df")
## [1] TRUE
Sys.getenv("HOME")
## [1] "C:\\Users\\HP\\Documents"
R.version.string
## [1] "R version 4.6.1 (2026-06-24 ucrt)"
system.time(for (i in 1:1e5) i^2)
##    user  system elapsed 
##       0       0       0
identical(c(1, 2), c(1, 2))
## [1] TRUE
all.equal(0.1 + 0.2, 0.3)
## [1] TRUE
nchar(Sys.time())
## [1] 16
invisible(gc())

cat("\n=== SELESAI: semua fungsi dasar R sudah dijalankan ===\n")
## 
## === SELESAI: semua fungsi dasar R sudah dijalankan ===