Fonksiyonları Geçirme
Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 28 / 64.
Bir fonksiyon, başka bir fonksiyonu argüman olarak alıp onu çağırabilir. Aşağıdaki apply_twice(), tek argüman alan herhangi bir fonksiyonla çalışır:
apply_twice <- function(f, x) f(f(x))
print(apply_twice(\(x) x + 3, 10))
print(apply_twice(toupper, "ok"))Çıktı:
[1] 16
[1] "OK"sum, max veya toupper gibi yerleşik işlevler de değerdir; bu nedenle onları parantez olmadan adlarıyla geçirin. Parantezlerle ise çağrılırlar:
summarize <- function(xs, how) how(xs)
print(summarize(c(4, 9, 2), max))
print(summarize(c(4, 9, 2), sum))Çıktı:
[1] 9
[1] 15predicate alan, TRUE veya FALSE döndüren bir işlev, değerleri herhangi bir kurala göre sayabilir veya seçebilir:
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))Çıktı:
[1] 2
[1] 3Çağıran davranışı belirler ve işlev döngüyü sağlar; böylece tek bir işlev birçok durumu kapsar:
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))Çıktı:
[1] 10 20 30 40
[1] "A" "B"Görev
Kolayapply_n(f, x, n) işlevini tamamla. f işlevini x üzerinde, ardından sonuç üzerinde toplam n kez çağır ve son değeri döndür. n 0 olduğunda, x değerini değiştirmeden döndür.
Sağlanan kod üç işlev tanımlar: double, inc ve half. Bunlardan birinin adını, başlangıç değerini ve n değerini okur ve apply_n() sonucunu yazdırır.
Kendin dene
apply_n <- function(f, x, n) {
# Kodunuzu buraya yazın
x
}
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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")
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Dizeleri Derinlemesine
substr() ile Alt Dizelersprintf() ile BiçimlendirmeBölme ve BirleştirmeDizelerde AramaMetin DeğiştirmeTekrar - Kullanıcı Adı Oluşturucu4Matrisler
Matris OluşturmaMatrisleri İndekslemeSatır ve Sütun ÖzetleriMatris AritmetiğiTekrar - Oturma Planı2Anahtar-Değer Aramaları
Adlandırılmış Vektör AramalarıAnahtarları DenetlemeAnahtar Ekleme ve KaldırmaAdlar Üzerinde DöngüTekrar - Hisse Senedi Masası5Proje - Not Defteri
Öğrenci EklemeNotları Kaydetme3Kümeler ve Sayma
Benzersiz DeğerlerKüme İşlemleriÜyelik Testleritable() ile SaymaTekrar - Etkinlik Konukları6Değer Olarak Fonksiyonlar
Anonim FonksiyonlarFonksiyonları GeçirmeFonksiyon DöndürmeDurum Bilgili Closure'larTekrar - İndirim Kuralları9Veri Çerçeveleri
Veri Çerçeveleri OluşturmaSütunlar ve SatırlarSatırları FiltrelemeEkleme ve SıralamaTekrar - Satış Raporu12Proje - Harcama Takipçisi
Harcamaları KaydetmeToplam HarcamaKendi başına pratik yap: Online R derleyicisi