Birden Fazla Girdi için map2() ve pmap()
map2() ve pmap() ile iki veya daha fazla liste üzerinde eş zamanlı yineleme yapın.
Birden Fazla Girdi için map2() ve pmap(), CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. 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.
Birden Çok Girdi Üzerinde Yineleme
map() aynı anda tek bir girdi üzerinde yineleme yapar. Ancak birçok işlevin iki veya daha fazla paralel girdiye ihtiyacı vardır. purrr içindeki map2() iki girdiyi, pmap() ise istenen sayıda girdiyi işler. Her ikisi de türü güvenli dönüş değeri garantisini korur.
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() — İki Paralel Girdi
map2(.x, .y, .f), .x ve .y içindeki karşılık gelen öğelere .f(x_i, y_i) uygular. Her iki vektörün de uzunluğu aynı olmalıdır (veya vektörlerden birinin uzunluğu 1 olup geri dönüştürülmesi gerekir). Bir liste döndürür.
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'))~ Kısa Gösterimiyle map2()
~expr formül kısa gösterimi map2() ile de çalışır: İlk girdiye .x, ikinci girdiye .y ile başvurulur. Böylece iki bağımsız değişken alan anonim işlevler kısa tutulabilir.
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, ']'))Türü Belirli map2() Çeşitleri
map() gibi map2() de türü güvenli dönüşler için türü belirli çeşitlere sahiptir: map2_dbl(), map2_chr(), map2_lgl(), map2_int() ve map2_df(). Beklediğiniz çıktı türüne uygun çeşidi kullanın.
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() — İstenen Sayıda Girdi
pmap(.l, .f), ilk bağımsız değişken olarak bir vektör listesi alır. Her vektör ayrı bir girdi akışıdır. İşlev, tüm girdi akışlarındaki karşılık gelen öğeleri aynı anda alır.
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, ')')
})Bir Veri Çerçevesiyle pmap()
Bir veri çerçevesi sütunlardan oluşan bir listedir; bu nedenle veri çerçevesini doğrudan pmap() işlevinin ilk bağımsız değişkeni olarak verebilirsiniz. İşlev, bir satırdaki değerleri adlandırılmış bağımsız değişkenler olarak alır; sütun adları parametre adlarıyla eşleştirilir.
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)Parametre Izgaraları Üzerinde Yineleme
pmap() için yaygın bir kullanım alanı, bir model parametreleri ızgarası üzerinde yineleme yapmaktır. Parametre birleşimlerini oluşturmak için expand.grid() veya tidyr::expand_grid() kullanın; ardından her satır için deneyi çalıştırmak üzere pmap() kullanın.
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() — Veri Çerçeveleri Oluşturma
map2_df() (veya map2_dfr()), iki paralel girdiye bir işlev uygular ve ortaya çıkan veri çerçevelerini satır bazında birleştirir. Bu yöntem, iki öğe kümesini karşılaştırmak veya paralel veri kümelerini birleştirmek için oldukça kullanışlıdır.
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() ile nest() İşlevini Birleştirme
pmap() işlevini iç içe veri çerçeveleri ve model parametreleriyle birlikte kullanmak güçlü bir yaklaşım sağlar: Üst parametreleri ve verileri tek bir veri çerçevesinde saklayın, ardından her parametre kümesiyle model kurmak için satırlar üzerinde pmap() uygulayın.
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() ile Hataları Ele Alma
map2()/pmap() iş akışlarında tek bir hatalı girdi tüm işlemi durdurabilir. Hataları yakalayıp varsayılan bir değer döndürmek için işlevinizi possibly(fn, otherwise=NA) ile sarın; böylece bazı girdiler başarısız olsa bile işlem hattı çalışmaya devam eder.
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)Uygulama: pmap() ile Çapraz Doğrulama
pmap() için pratik bir uygulama, kat atamalarını yineleyerek k-katlı çapraz doğrulama çalıştırmaktır. pmap(), her kata ait eğitim ve test verilerini model kurma işlevine iletir ve her kat için bir performans ölçütü döndürür.
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))Kısa Kontrol
İkiden fazla paralel girdi vektörü üzerinde aynı anda yineleme yapmak için hangi purrr işlevi uygundur?
Özet: map2() ve pmap()
Birden çok girdiyle eşleme için temel noktalar:
map2(.x, .y, .f)— iki paralel girdi üzerinde yineleme yapar;~kısa gösteriminde.xve.ykullanılırmap2_dbl/chr/lgl/int/df()— türü güvenli dönüşler için türü belirli çeşitlerpmap(.l, .f)— istenen sayıda vektörden oluşan bir liste üzerinde aynı anda yineleme yapar- Bir veri çerçevesini
pmap()işlevine verin — sütun adları işlev parametrelerinin adları olur - Parametre ızgarasında arama yapmak için
expand.grid()+pmap()kullanın - Güvenli hata yönetimi için işlevleri
possibly(fn, NA)ile sarın
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)
})Sıkça Sorulan Sorular
“Birden Fazla Girdi için map2() ve pmap()” dersi ücretsiz mi?
Evet — “Birden Fazla Girdi için map2() ve pmap()” 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.
“Birden Fazla Girdi için map2() ve pmap()” dersinde ne öğreneceğim?
map2() ve pmap() ile iki veya daha fazla liste üzerinde eş zamanlı yineleme yapı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 2. dersidir.
“Birden Fazla Girdi için map2() ve pmap()” 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