एकाधिक इनपुट के लिए map2() और pmap()
map2() और pmap() से दो या अधिक सूचियों पर एक साथ पुनरावृत्ति करें।
एकाधिक इनपुट के लिए map2() और pmap(), CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
एकाधिक इनपुट पर पुनरावृत्ति
map() एक समय में एक इनपुट पर पुनरावृत्ति करता है। लेकिन कई फ़ंक्शनों को दो या अधिक समानांतर इनपुट की आवश्यकता होती है। purrr का map2() दो इनपुट संभालता है; pmap() किसी भी संख्या में इनपुट संभालता है। दोनों प्रकार-सुरक्षित रिटर्न मान की समान गारंटी देते हैं।
library(purrr)
# Simulate: add corresponding elements from two vectors
x <- c(1, 2, 3, 4)
y <- c(10, 20, 30, 40)
# map2 applies fn(x[i], y[i]) for each i
result <- map2(x, y, function(a, b) a + b)
print(result)map2() — दो समानांतर इनपुट
map2(.x, .y, .f), .x और .y के संबंधित तत्वों पर .f(x_i, y_i) लागू करता है। दोनों वेक्टरों की लंबाई समान होनी चाहिए (या उनमें से एक की लंबाई 1 हो और उसे दोहराया जाए)। यह एक सूची लौटाता है।
library(purrr)
names_vec <- c('Alice','Bob','Carol')
scores_vec <- c(85, 92, 78)
# Build a personalized message for each student
map2_chr(names_vec, scores_vec,
~paste(.x, 'scored', .y, 'points'))~ शॉर्टहैंड के साथ map2()
फ़ॉर्मूला शॉर्टहैंड ~expr, map2() के साथ भी काम करता है: .x पहले इनपुट को और .y दूसरे इनपुट को दर्शाता है। इससे दो-आर्गुमेंट वाले अनाम फ़ंक्शन संक्षिप्त रहते हैं।
library(purrr)
lower_bounds <- c(0, 10, 20, 50)
upper_bounds <- c(9, 19, 49, 100)
# Create labels for each range
map2_chr(lower_bounds, upper_bounds,
~paste0('[', .x, '-', .y, ']'))map2() के प्रकार-विशिष्ट संस्करण
map() की तरह map2() में भी प्रकार-सुरक्षित रिटर्न के लिए प्रकार-विशिष्ट संस्करण हैं: map2_dbl(), map2_chr(), map2_lgl(), map2_int() और map2_df()। अपने अपेक्षित आउटपुट प्रकार से मेल खाने वाले संस्करण का उपयोग करें।
library(purrr)
actual <- c(100, 150, 200, 120)
target <- c(110, 140, 195, 130)
# Numeric: percentage achievement
map2_dbl(actual, target, ~round(100 * .x / .y, 1))
# Logical: did they meet their target?
map2_lgl(actual, target, ~.x >= .y)pmap() — किसी भी संख्या में इनपुट
pmap(.l, .f) अपने पहले आर्गुमेंट के रूप में वेक्टरों की सूची लेता है। प्रत्येक वेक्टर एक अलग इनपुट धारा होता है। फ़ंक्शन को सभी इनपुट धाराओं से संबंधित तत्व एक साथ प्राप्त होते हैं।
library(purrr)
# Three parallel inputs
params <- list(
name = c('Alice','Bob','Carol'),
score = c(85, 92, 78),
grade = c('B','A','C')
)
pmap_chr(params, function(name, score, grade) {
paste(name, ':', score, '(', grade, ')')
})डेटा फ़्रेम के साथ pmap()
डेटा फ़्रेम स्तंभों की एक सूची होता है — इसलिए आप डेटा फ़्रेम को सीधे pmap() के पहले आर्गुमेंट के रूप में दे सकते हैं। फ़ंक्शन को एक पंक्ति के मान नामित आर्गुमेंट के रूप में मिलते हैं; स्तंभों के नाम पैरामीटरों के नामों से मेल खाते हैं।
library(purrr)
params_df <- data.frame(
mean_val = c(0, 5, 10),
sd_val = c(1, 2, 3),
n = c(100, 50, 200)
)
# Generate samples from different normal distributions
set.seed(42)
results <- pmap(params_df, function(mean_val, sd_val, n) {
rnorm(n, mean=mean_val, sd=sd_val)
})
map_dbl(results, mean)पैरामीटर ग्रिड पर पुनरावृत्ति
pmap() का एक सामान्य उपयोग मॉडल पैरामीटरों की ग्रिड पर पुनरावृत्ति करना है। पैरामीटर संयोजन बनाने के लिए expand.grid() या tidyr::expand_grid() का उपयोग करें, फिर प्रत्येक पंक्ति के लिए प्रयोग चलाने हेतु pmap() का उपयोग करें।
library(purrr)
# Create a parameter grid
grid <- expand.grid(
learning_rate = c(0.01, 0.1),
epochs = c(10, 50),
batch_size = c(32, 64)
)
# Simulate model training results
set.seed(42)
grid$accuracy <- pmap_dbl(grid, function(learning_rate, epochs, batch_size) {
base <- 0.5 + 0.3 * log10(epochs) + 0.1 * learning_rate
round(min(base + rnorm(1, 0, 0.02), 0.99), 3)
})
print(grid[order(-grid$accuracy),])map2_df() — डेटा फ़्रेम बनाना
map2_df() (या map2_dfr()) दो समानांतर इनपुट पर फ़ंक्शन लागू करता है और परिणामस्वरूप बने डेटा फ़्रेमों को पंक्तियों के आधार पर जोड़ता है। दो वस्तु-समूहों की तुलना करने या समानांतर डेटासेट को मिलाने के लिए यह बहुत उपयोगी है।
library(purrr)
q1_sales <- list(East=100, West=200, North=80)
q2_sales <- list(East=120, West=190, North=95)
map2_df(q1_sales, q2_sales, function(q1, q2) {
data.frame(
q1 = q1,
q2 = q2,
change = q2 - q1,
pct = round(100*(q2-q1)/q1, 1)
)
}, .id = 'region')pmap() को nest() के साथ संयोजित करना
pmap() को नेस्टेड डेटा फ़्रेमों और मॉडल पैरामीटरों के साथ संयोजित करने से एक शक्तिशाली तरीका मिलता है: हाइपरपैरामीटर और डेटा को एक डेटा फ़्रेम में रखें, फिर प्रत्येक पैरामीटर-समूह के साथ मॉडल फ़िट करने के लिए पंक्तियों पर pmap() चलाएँ।
library(purrr)
library(dplyr)
# Simulate polynomial regression with different degrees
set.seed(42)
x <- 1:20
y <- 2*x + 0.5*x^2 + rnorm(20, 0, 10)
df <- data.frame(x=x, y=y)
configs <- data.frame(degree = 1:3)
configs$r2 <- map_dbl(configs$degree, function(d) {
m <- lm(y ~ poly(x, d), data=df)
summary(m)$r.squared
})
print(configs)possibly() के साथ त्रुटि प्रबंधन
map2()/pmap() कार्यप्रवाह में एक खराब इनपुट पूरी प्रक्रिया को रोक सकता है। त्रुटियाँ पकड़ने और डिफ़ॉल्ट मान लौटाने के लिए अपने फ़ंक्शन को possibly(fn, otherwise=NA) में लपेटें। इससे कुछ इनपुट विफल होने पर भी पाइपलाइन चलती रहती है।
library(purrr)
safe_log <- possibly(log, otherwise=NA_real_)
values <- list(10, -5, 100, 0, 50)
# Without possibly(): log() warns for negative numbers
# With possibly(): errors return NA, computation continues
map_dbl(values, safe_log)व्यावहारिक: pmap() के साथ क्रॉस-वैलिडेशन
pmap() का एक व्यावहारिक उपयोग: फ़ोल्ड असाइनमेंट पर पुनरावृत्ति करके k-फ़ोल्ड क्रॉस-वैलिडेशन चलाना। pmap() प्रत्येक फ़ोल्ड का प्रशिक्षण और परीक्षण डेटा फ़िटिंग फ़ंक्शन को देता है और प्रत्येक फ़ोल्ड के लिए एक प्रदर्शन माप लौटाता है।
library(purrr)
set.seed(42)
df <- data.frame(x=1:20, y=2*(1:20)+rnorm(20,0,3))
df$fold <- sample(rep(1:5, 4))
# Compute RMSE for each held-out fold
folds <- 1:5
rmse_vals <- map_dbl(folds, function(k) {
train <- df[df$fold != k, ]
test <- df[df$fold == k, ]
m <- lm(y ~ x, data=train)
preds <- predict(m, newdata=test)
sqrt(mean((test$y - preds)^2))
})
cat('Per-fold RMSE:', round(rmse_vals, 2), '\n')
cat('Mean RMSE:', round(mean(rmse_vals), 2))त्वरित जाँच
दो से अधिक समानांतर इनपुट वेक्टरों पर एक साथ पुनरावृत्ति करने के लिए कौन-सा purrr फ़ंक्शन उपयुक्त है?
पुनरावलोकन: map2() और pmap()
एकाधिक इनपुट पर मैपिंग से जुड़ी मुख्य बातें:
map2(.x, .y, .f)— दो समानांतर इनपुट पर पुनरावृत्ति करता है;~शॉर्टहैंड में.xऔर.ymap2_dbl/chr/lgl/int/df()— प्रकार-सुरक्षित रिटर्न के लिए प्रकार-विशिष्ट संस्करणpmap(.l, .f)— किसी भी संख्या में वेक्टरों की सूची पर एक साथ पुनरावृत्ति करता है- डेटा फ़्रेम को
pmap()में दें — स्तंभों के नाम फ़ंक्शन पैरामीटरों के नाम बन जाते हैं - पैरामीटर ग्रिड खोज के लिए
expand.grid()+pmap()का उपयोग करें - सुरक्षित त्रुटि प्रबंधन के लिए फ़ंक्शनों को
possibly(fn, NA)में लपेटें
library(purrr)
# pmap with a data frame: each row = one function call
params <- data.frame(
mean_val = c(0, 10, 100),
sd_val = c(1, 5, 20),
label = c('control','mid','high')
)
pmap_chr(params, function(mean_val, sd_val, label) {
sprintf('%s: mean=%.0f, sd=%.0f', label, mean_val, sd_val)
})एआई शिक्षक के साथ R सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 43
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “एकाधिक इनपुट के लिए map2() और pmap()” पाठ निःशुल्क है?
हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “एकाधिक इनपुट के लिए map2() और pmap()” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“एकाधिक इनपुट के लिए map2() और pmap()” में मैं क्या सीखूँगा?
map2() और pmap() से दो या अधिक सूचियों पर एक साथ पुनरावृत्ति करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“एकाधिक इनपुट के लिए map2() और pmap()” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- map() और टाइपयुक्त रूप
- एकाधिक इनपुट के लिए map2() और pmap()
- reduce(), accumulate() और walk()
- keep(), discard() और सूची फ़िल्टरिंग