R Academy · पाठ

reduce(), accumulate() और walk()

सूचियों को समेटें, संचयी परिणाम बनाएँ और walk() से साइड इफ़ेक्ट लागू करें।

पाठ 3, कुल 4 में से13 चरण

reduce(), accumulate() और walk(), CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

map() से आगे — अन्य purrr क्रियाएँ

जहाँ map() प्रत्येक तत्व पर स्वतंत्र रूप से फ़ंक्शन लागू करता है, वहीं कुछ कार्यों में तत्वों को संयोजित करना (reduce), मध्यवर्ती परिणामों को संचित करना, या केवल दुष्प्रभावों के लिए फ़ंक्शन लागू करना (walk) आवश्यक होता है। purrr प्रत्येक स्थिति के लिए समर्पित फ़ंक्शन प्रदान करता है।

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() — सूची को एक मान में समेटना

reduce(.x, .f, .init), .x के तत्वों पर बाएँ से दाएँ क्रम में संचयी रूप से .f लागू करता है और सूची को एकल मान में समेट देता है। reduce(list(a,b,c), f), f(f(a,b),c) की गणना करता है।

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 के साथ reduce()

.init आर्गुमेंट प्रारंभिक (seed) मान प्रदान करता है। पहली कॉल f(.init, x[1]) बन जाती है। यह तब आवश्यक है जब सूची खाली हो सकती है (ऐसी स्थिति में परिणाम .init होता है) या जब आपको कोई विशिष्ट प्रारंभिक स्थिति चाहिए।

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')

डेटा फ़्रेम के साथ reduce() — जॉइन की शृंखला बनाना

reduce() के सबसे शक्तिशाली उपयोगों में से एक डेटा फ़्रेमों की सूची को जोड़ना है। left_join(left_join(df1, df2), df3) लिखने के बजाय reduce(list_of_dfs, left_join, by='key') का उपयोग करें।

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() — मध्यवर्ती परिणाम बनाए रखना

accumulate(.x, .f) reduce() जैसा है, लेकिन सभी मध्यवर्ती मानों को बनाए रखता है। यह इनपुट के समान लंबाई का वेक्टर (या सूची) लौटाता है और प्रत्येक चरण के बाद का संचयी परिणाम दिखाता है।

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)

चरण-दर-चरण परिणामों के लिए accumulate()

accumulate() एल्गोरिदम के चरणों का पता लगाने, अक्षर-दर-अक्षर स्ट्रिंग बनाने या ऐसी किसी भी प्रक्रिया के लिए विशेष रूप से उपयोगी है जिसमें आप केवल अंतिम परिणाम नहीं, बल्कि प्रत्येक मध्यवर्ती स्थिति देखना चाहते हैं।

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() — रिटर्न के बिना दुष्प्रभाव

walk(.x, .f) केवल दुष्प्रभावों (प्रिंट करना, फ़ाइलें लिखना, संदेश भेजना) के लिए .x के प्रत्येक तत्व पर .f लागू करता है। यह अदृश्य रूप से .x लौटाता है, इसलिए आप शृंखला तोड़े बिना इसे पाइपलाइन में उपयोग कर सकते हैं।

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')
})

पाइपलाइन में walk()

क्योंकि walk() अदृश्य रूप से .x लौटाता है, इसलिए आप प्रवाह तोड़े बिना मध्यवर्ती परिणामों को लॉग या प्रिंट करने के लिए इसे dplyr पाइपलाइन में शामिल कर सकते हैं। इसे डीबगिंग या लॉगिंग टैप की तरह समझें।

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() — दो इनपुट के साथ दुष्प्रभाव

walk2(.x, .y, .f), walk() का दो-इनपुट वाला संस्करण है। इसका एक सामान्य उपयोग कई डेटा फ़्रेमों को फ़ाइलों में लिखना है, जहाँ .x डेटा फ़्रेमों की सूची और .y फ़ाइल पथों की सूची होती है।

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() — अनुक्रमणिका के साथ walk

iwalk(.x, .f), walk() जैसा है, लेकिन तत्व का नाम (या अनुक्रमणिका) दूसरे आर्गुमेंट .y के रूप में भेजता है। जब आपको यह जानना हो कि दुष्प्रभाव के दौरान किस तत्व को संसाधित किया जा रहा है, तब यह सुविधाजनक होता है।

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() — दाएँ से बाएँ समेटना

reduce(.x, .f, .dir='backward') (या अप्रचलित reduce_right()) फ़ंक्शन को दाएँ से बाएँ लागू करता है: f(a, f(b, f(c, d)))। घटाव या स्ट्रिंग बनाने जैसी गैर-क्रमविनिमेय क्रियाओं के लिए यह महत्वपूर्ण है।

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))

त्वरित जाँच

आप map() के बजाय walk() का उपयोग कब करेंगे?

पुनरावलोकन: reduce, accumulate, walk

reduce, accumulate और walk से जुड़ी मुख्य बातें:

  • reduce(.x, .f) — सूची को एक मान में समेटता है (बाएँ से दाएँ); .init प्रारंभिक मान तय करता है
  • reduce(list_of_dfs, left_join) — जॉइन की शृंखला बनाने का शक्तिशाली तरीका
  • accumulate(.x, .f) — reduce जैसा, लेकिन सभी मध्यवर्ती परिणाम लौटाता है
  • walk(.x, .f) — दुष्प्रभावों के लिए लागू करता है (प्रिंट, लिखना, लॉग करना); .x लौटाता है
  • walk2(.x, .y, .f) — दो-इनपुट वाला walk (जैसे, डेटा फ़्रेम + फ़ाइल पथ)
  • iwalk(.x, .f) — दूसरे आर्गुमेंट के रूप में तत्व के नाम के साथ 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'))
शुरुआत निःशुल्क

एआई शिक्षक के साथ R सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
43
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “reduce(), accumulate() और walk()” पाठ निःशुल्क है?

हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “reduce(), accumulate() और walk()” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“reduce(), accumulate() और walk()” में मैं क्या सीखूँगा?

सूचियों को समेटें, संचयी परिणाम बनाएँ और walk() से साइड इफ़ेक्ट लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“reduce(), accumulate() और walk()” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. map() और टाइपयुक्त रूप
  2. एकाधिक इनपुट के लिए map2() और pmap()
  3. reduce(), accumulate() और walk()
  4. keep(), discard() और सूची फ़िल्टरिंग
← R Academy पर वापस जाएँ