Menu
Coddy logo textTech

Reduce

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

Reduce(f, x), x içindeki öğeleri tek bir değerde birleştirir: f işlevini ilk iki öğe üzerinde, ardından bu sonuç ve üçüncü öğe üzerinde çalıştırır ve bu şekilde devam eder. + ile her şeyi toplar:

print(Reduce(function(acc, x) acc + x, c(3, 5, 10)))
print(Reduce(`+`, 1:5))

Çıktı:

[1] 18
[1] 15

+ gibi operatörler de işlevlerdir. Ters tırnaklarla yazılan `+`, diğer tüm işlevler gibi aktarılabilir. Reduce(), iki kelimeden uzun olanı korumak gibi birleştirme işlemi için yerleşik bir işlev olmadığında en kullanışlıdır:

longer <- function(a, b) if (nchar(b) > nchar(a)) b else a
print(Reduce(longer, c("fig", "banana", "kiwi", "cherry")))

Çıktı:

[1] "banana"

Üçüncü bağımsız değişken olan init, başlangıç değeridir. İlk acc olarak kullanılır ve x boş olduğunda sonuç da budur:

print(Reduce(`+`, c(), 0))
print(Reduce(function(acc, w) paste0(acc, toupper(substr(w, 1, 1))), c("portable", "network", "graphics"), ""))

Çıktı:

[1] 0
[1] "PNG"

accumulate = TRUE yalnızca son sonuç yerine her ara sonucu döndürür; bu da birikimli toplamları verir:

deposits <- c(100, -30, 50, -80)
print(Reduce(`+`, deposits, accumulate = TRUE))

Çıktı:

[1] 100  70 120  40
challenge icon

Görev

Kolay

running_balance(start, changes) işlevini tamamla. start değerinden başlayarak her değişikliği sırayla uygula. Her değişiklikten sonraki bakiyeyi içeren, değişiklik başına bir satır döndür: after 1: 70; son satırda ise ulaşılan en düşük bakiyenin ( start dahil) önüne lowest: ekle.

Sağlanan kod, başlangıç bakiyesini ve değişiklikleri virgülle ayrılmış bir satır olarak okur ve döndürülen her satırı yazdırır.

Kendin dene

running_balance <- function(start, changes) {
  # Kodunuzu buraya yazın
  character(0)
}

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
cat(running_balance(as.numeric(input[1]), as.numeric(strsplit(input[2], ",")[[1]])), 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