Mengirim Fungsi
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 28 dari 64.
Sebuah fungsi dapat menerima fungsi lain sebagai argumen dan memanggilnya. apply_twice() di bawah ini dapat digunakan dengan fungsi apa pun yang memiliki satu argumen:
apply_twice <- function(f, x) f(f(x))
print(apply_twice(\(x) x + 3, 10))
print(apply_twice(toupper, "ok"))output:
[1] 16
[1] "OK"Fungsi bawaan seperti sum, max, atau toupper juga merupakan nilai, jadi berikan nama fungsi tersebut tanpa tanda kurung. Jika menggunakan tanda kurung, fungsi tersebut akan dipanggil:
summarize <- function(xs, how) how(xs)
print(summarize(c(4, 9, 2), max))
print(summarize(c(4, 9, 2), sum))Output:
[1] 9
[1] 15Fungsi yang menerima predikat, yaitu fungsi yang mengembalikan TRUE atau FALSE, dapat menghitung atau memilih nilai berdasarkan aturan apa pun:
count_if <- function(xs, keep) {
n <- 0
for (x in xs) if (keep(x)) n <- n + 1
n
}
print(count_if(c(3, 8, 10, 5), \(x) x %% 2 == 0))
print(count_if(c(3, 8, 10, 5), \(x) x > 4))Output:
[1] 2
[1] 3Pemanggil menentukan perilakunya dan fungsi menyediakan perulangannya, jadi satu fungsi mencakup banyak kasus:
transform_each <- function(xs, f) {
out <- c()
for (x in xs) out <- c(out, f(x))
out
}
print(transform_each(1:4, \(x) x * 10))
print(transform_each(c("a", "b"), toupper))Output:
[1] 10 20 30 40
[1] "A" "B"Tantangan
MudahLengkapi apply_n(f, x, n). Panggil f pada x, lalu pada hasilnya, sebanyak n kali secara keseluruhan, dan kembalikan nilai akhirnya. Jika n adalah 0, kembalikan x tanpa perubahan.
Kode yang disediakan mendefinisikan tiga fungsi, double, inc, dan half. Kode tersebut membaca nama salah satunya, nilai awal, dan n, lalu mencetak hasil apply_n().
Coba sendiri
apply_n <- function(f, x, n) {
# Tulis kodemu di sini
x
}
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
ops <- list(double = \(x) x * 2, inc = \(x) x + 1, half = \(x) x / 2)
cat(apply_n(ops[[input[1]]], as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Substring dengan substr()Memformat dengan sprintf()Memisahkan dan MenggabungkanMencari stringMengganti TeksRangkuman: Pembuat Nama Pengguna4Matriks
Membuat MatriksMengakses Elemen MatriksRingkasan Baris dan KolomAritmetika MatriksRangkuman: Denah Tempat Duduk2Pencarian Nilai-Kunci
Pencarian pada Vector BernamaMemeriksa KunciMenambahkan dan Menghapus KunciMenelusuri NamaUlasan: Meja Saham5Proyek, Buku Nilai
Menambahkan SiswaMencatat Nilai3Set dan Penghitungan
Nilai UnikOperasi setPengujian KeanggotaanMenghitung dengan table()Ulasan: Tamu Acara6Fungsi sebagai Nilai
Fungsi AnonimMengirim FungsiMengembalikan FungsiClosure dengan StateRangkuman: Aturan Diskon9Data Frame
Membuat Data FrameKolom dan BarisMemfilter BarisMenambahkan dan MengurutkanRangkuman: Laporan Penjualan12Proyek: Pelacak Pengeluaran
Mencatat PengeluaranTotal PengeluaranLatihan sendiri: Compiler R online