reduce(), accumulate() ve walk()
Listeleri katlayın, birikimli sonuçlar oluşturun ve walk() ile yan etkiler uygulayın.
reduce(), accumulate() ve walk(), CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
map() Ötesi — Diğer purrr Fiilleri
map() bir işlevi her öğeye bağımsız olarak uygularken bazı görevlerde öğeleri birleştirmek (reduce), ara sonuçları biriktirmek veya işlevleri yalnızca yan etkileri için çalıştırmak (walk) gerekir. purrr, bu durumların her biri için özel işlevler sağlar.
library(purrr)
# Example: combining a list of numbers into a single value
nums <- list(1, 2, 3, 4, 5)
# We want: 1 + 2 + 3 + 4 + 5 = 15
# map() can't do this — it returns 5 separate results
# reduce() folds the list into one value
result <- reduce(nums, `+`)
cat('Sum via reduce:', result)reduce() — Listeyi Tek Bir Değere İndirgeme
reduce(.x, .f, .init), .f işlevini .x öğelerine soldan sağa, birikimli olarak uygular ve listeyi tek bir değere indirger. reduce(list(a,b,c), f), f(f(a,b),c) hesaplamasını yapar.
library(purrr)
# reduce with max: find the overall maximum
values <- list(42, 17, 89, 55, 23)
result <- reduce(values, max)
cat('Maximum:', result, '\n')
# reduce with paste: concatenate strings
words <- list('The', 'quick', 'brown', 'fox')
reduce(words, paste).init ile reduce()
.init bağımsız değişkeni başlangıç (seed) değerini sağlar. İlk çağrı f(.init, x[1]) biçiminde olur. Liste boş olabilecekse (sonuç .init olur) veya belirli bir başlangıç durumuna ihtiyaç duyuyorsanız bu bağımsız değişken gereklidir.
library(purrr)
# Running count of elements matching a condition
data <- list(5, 12, 3, 18, 7, 15, 2)
# Count values greater than 10, starting from 0
reduce(data, function(count, x) count + (x > 10), .init = 0L)
# Also useful for string building:
reduce(c('A','B','C'), paste, sep='-', .init='START')Veri Çerçeveleriyle reduce() — Birleştirmeleri Zincirleme
reduce() işlevinin en güçlü kullanımlarından biri, veri çerçevelerinden oluşan bir listeyi birleştirmektir. left_join(left_join(df1, df2), df3) yazmak yerine reduce(list_of_dfs, left_join, by='key') kullanın.
library(purrr)
library(dplyr)
base_df <- data.frame(id=1:3, name=c('Alice','Bob','Carol'))
scores <- data.frame(id=1:3, score=c(85,90,78))
grades <- data.frame(id=1:3, grade=c('B','A','C'))
city <- data.frame(id=1:3, city=c('NYC','LA','Chicago'))
dfs <- list(base_df, scores, grades, city)
reduce(dfs, left_join, by='id')accumulate() — Ara Sonuçları Koruma
accumulate(.x, .f), reduce() işlevine benzer; ancak tüm ara değerleri korur. Girdiyle aynı uzunlukta bir vektör (veya liste) döndürür ve her adımdan sonraki birikimli sonucu gösterir.
library(purrr)
# Running sum — same as cumsum() but via accumulate
values <- c(100, 120, 95, 140, 160)
accumulate(values, `+`)
# Running maximum
accumulate(c(50, 52, 48, 55, 53, 58), max)Adım Adım Sonuçlar için accumulate()
accumulate(), algoritmanın adımlarını izlemek, dizeleri karakter karakter oluşturmak veya yalnızca nihai sonucu değil her ara durumu incelemek istediğiniz işlemler için özellikle kullanışlıdır.
library(purrr)
# Compound interest step by step
principal <- 1000
rates <- c(0.05, 0.05, 0.05, 0.05, 0.05) # 5% per year
accumulate(rates, function(balance, rate) {
round(balance * (1 + rate), 2)
}, .init = principal)walk() — Dönüş Değeri Olmadan Yan Etkiler
walk(.x, .f), .f işlevini .x içindeki her öğeye yalnızca yan etkileri (yazdırma, dosya yazma, ileti gönderme) için uygular. .x değerini görünmez biçimde döndürür; böylece zinciri bozmadan bir işlem hattında kullanabilirsiniz.
library(purrr)
# Print a summary for each dataset
datasets <- list(
mtcars = mtcars[,1:3],
iris = iris[,1:3]
)
walk(datasets, function(df) {
cat('Rows:', nrow(df), '| Cols:', ncol(df),
'| NAs:', sum(is.na(df)), '\n')
})Bir İşlem Hattında walk()
walk() işlevi .x değerini görünmez biçimde döndürdüğü için, akışı bozmadan ara sonuçları günlüğe kaydetmek veya yazdırmak amacıyla bir dplyr işlem hattına eklenebilir. Bunu hata ayıklama ya da günlük kaydı için kullanılan bir gözlem noktası gibi düşünebilirsiniz.
library(purrr)
library(dplyr)
results <- list(
East = data.frame(rep=c('A','B'), sales=c(100,120)),
West = data.frame(rep=c('C','D'), sales=c(200,190))
)
# Log each region's data, then continue processing
region_totals <- results %>%
walk(~cat('Processing:', nrow(.x), 'rows\n')) %>%
map_dbl(~sum(.x$sales))
print(region_totals)walk2() — İki Girdiyle Yan Etkiler
walk2(.x, .y, .f), walk() işlevinin iki girdili sürümüdür. Klasik bir kullanım alanı, birden çok veri çerçevesini dosyalara yazmaktır; burada .x veri çerçevelerinin listesi, .y ise dosya yollarının listesidir.
library(purrr)
data_list <- list(
east = data.frame(x=1:3, y=4:6),
west = data.frame(x=7:9, y=10:12)
)
file_paths <- list(
'/tmp/east_data.csv',
'/tmp/west_data.csv'
)
# Write each data frame to its corresponding path
walk2(data_list, file_paths, function(df, path) {
write.csv(df, path, row.names=FALSE)
cat('Written:', path, '\n')
})iwalk() — Dizinle Birlikte walk
iwalk(.x, .f), walk() işlevine benzer; ancak öğe adını (veya dizinini) ikinci bağımsız değişken olan .y olarak iletir. Yan etkiyi uygularken hangi öğeyi işlediğinizi bilmeniz gerektiğinde kullanışlıdır.
library(purrr)
region_counts <- list(East=150, West=200, North=85, South=120)
# Print each region with its rank
iwalk(region_counts, function(count, name) {
cat(name, ':', count, 'customers\n')
})reduce_right() — Sağdan Sola İndirgeme
reduce(.x, .f, .dir='backward') (veya artık kullanımdan kaldırılmış olan reduce_right()), işlevi sağdan sola uygular: f(a, f(b, f(c, d))). Bu durum, çıkarma veya dize oluşturma gibi değişme özelliği olmayan işlemler için önemlidir.
library(purrr)
words <- c('fox','brown','quick','The')
# Left-to-right: 'The quick brown fox'
reduce(rev(words), paste)
# Right-to-left: same effect but starting from right
reduce(words, function(a, b) paste(b, a))Kısa Kontrol
map() yerine ne zaman walk() kullanırsınız?
Özet: reduce, accumulate, walk
reduce, accumulate ve walk için temel noktalar:
reduce(.x, .f)— listeyi tek bir değere indirger (soldan sağa);.initbaşlangıç değerini belirlerreduce(list_of_dfs, left_join)— birleştirmeleri zincirlemek için güçlü bir yaklaşımdıraccumulate(.x, .f)— reduce gibidir, ancak tüm ara sonuçları döndürürwalk(.x, .f)— yan etkiler için uygular (yazdırma, yazma, günlüğe kaydetme);.xdeğerini döndürürwalk2(.x, .y, .f)— iki girdili walk (ör. veri çerçevesi + dosya yolu)iwalk(.x, .f)— öğe adını ikinci bağımsız değişken olarak alan walk
library(purrr)
library(dplyr)
# reduce() joins a list of data frames, accumulate() shows interim states
monthly_sums <- c(100, 120, 95, 140, 160, 130)
cat('reduce (total): ', reduce(monthly_sums, `+`), '\n')
cat('accumulate (running):', accumulate(monthly_sums, `+`), '\n')
# walk() for side-effect logging
results <- list(a=42, b=17, c=89)
walk(results, ~cat('Value:', .x, '\n'))Yapay zeka eğitmeniyle R öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 43
- Dersler
- 159
Sıkça Sorulan Sorular
“reduce(), accumulate() ve walk()” dersi ücretsiz mi?
Evet — “reduce(), accumulate() ve walk()” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“reduce(), accumulate() ve walk()” dersinde ne öğreneceğim?
Listeleri katlayın, birikimli sonuçlar oluşturun ve walk() ile yan etkiler uygulayın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“reduce(), accumulate() ve walk()” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- map() ve Türlendirilmiş Çeşitleri
- Birden Fazla Girdi için map2() ve pmap()
- reduce(), accumulate() ve walk()
- keep(), discard() ve Liste Filtreleme