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 40Görev
Kolayrunning_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")
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