Menu
CoddyTech

Fungsi Anonim

Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 27 dari 64.

Di R, fungsi adalah nilai seperti angka atau string. function(x) x * 2 membuat fungsi tanpa memberinya nama, dan nilai dari ekspresi terakhirnya adalah nilai yang dikembalikan:

double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))

Output:

[1] 42
[1] 10

R 4.1 menambahkan bentuk singkat: \(x) artinya sama dengan function(x). Gunakan kurung kurawal jika isi fungsi memerlukan beberapa baris:

square <- \(x) x^2
label <- function(x) {
  size <- if (x > 10) "big" else "small"
  paste(x, "is", size)
}
print(square(4))
print(label(12))

Output:

[1] 16
[1] "12 is big"

Karena fungsi adalah nilai, list dapat menyimpan beberapa fungsi dengan nama tertentu. ops[["inc"]] adalah fungsi, jadi ops[["inc"]](5) memanggilnya:

ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))

Output:

[1] 6
[1] "inc" "neg"

Sebuah fungsi dapat menerima beberapa argumen dan memberikan nilai default untuk beberapa di antaranya, sama seperti fungsi bernama:

area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))

Output:

[1] 9
[1] 15
challenge icon

Tantangan

Mudah

Lengkapi list ops dengan tiga fungsi anonim yang masing-masing menerima satu argumen:

  • double mengembalikan argumen dikali 2
  • square mengembalikan argumen dikali dirinya sendiri
  • negate mengembalikan argumen dengan tandanya dibalik

Kode yang disediakan membaca nama operasi dan sebuah angka, memanggil fungsi tersebut dari ops, lalu mencetak hasilnya.

Coba sendiri

ops <- list(
  # Tulis kodemu di sini
  double = function(x) x
)

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler R online