Menu
Coddy logo textTech

Anonim Fonksiyonlar

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 27 / 64.

R'da bir fonksiyon, bir sayı veya dize gibi bir değerdir. function(x) x * 2 ona bir ad vermeden bir fonksiyon oluşturur ve son ifadesinin değeri, fonksiyonun döndürdüğü değerdir:

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

Çıktı:

[1] 42
[1] 10

R 4.1 kısa bir biçim ekledi: \(x), function(x) ile aynı anlama gelir. Gövde birkaç satır gerektirdiğinde süslü parantezleri kullanın:

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

Çıktı:

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

Fonksiyonlar değer olduğundan, bir liste bunlardan birkaçını adlar altında tutabilir. ops[["inc"]] bir fonksiyondur; dolayısıyla ops[["inc"]](5) onu çağırır:

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

Çıktı:

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

Bir işlev, tıpkı adlandırılmış bir işlev gibi, birden fazla bağımsız değişken alabilir ve bunlardan bazılarına varsayılan değerler verebilir:

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

Çıktı:

[1] 9
[1] 15
challenge icon

Görev

Kolay

ops listesini tek bir argüman alan üç anonim fonksiyonla tamamlayın:

  • double argümanın 2 ile çarpımını döndürür
  • square argümanın kendisiyle çarpımını döndürür
  • negate argümanın işaretini tersine çevirerek döndürür

Verilen kod bir işlemin adını ve bir sayıyı okur, ops içinden bu fonksiyonu çağırır ve sonucu yazdırır.

Kendin dene

ops <- list(
  # Kodunuzu buraya yazın
  double = function(x) x
)

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
quiz iconKendini test et

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

Kendi başına pratik yap: Online R derleyicisi