0Pricing
R Academy · Ders

Düzenli Değerlendirme: {{ }} ve .data

Sütun adlarını bağımsız değişken olarak güvenle kabul eden dplyr işlevleri yazın.

Düzenli Değerlendirme: {{ }} ve .data, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. 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.

Sorun: dplyr ile Programlama

dplyr, standart dışı değerlendirme (NSE) kullanır — sütun adları tırnaksız olarak aktarılır. Bu, etkileşimli kullanımda pratiktir; ancak işlev yazarken zorlayıcı olabilir. Bir sütun adını dplyr işlevine değişken olarak nasıl aktarırsınız?

library(dplyr)

df <- data.frame(x=1:5, y=c(2,4,6,8,10))

# Works fine interactively:
df %>% summarize(mean_x = mean(x))

# But what if 'x' is a variable?
col_name <- 'x'
# df %>% summarize(result = mean(col_name))  # WRONG! treats 'col_name' as column
cat('Need tidy evaluation to solve this!')

{{ }} Sarma İşleci

Bir işlevin içinde, veri çerçevesi bağlamında değerlendirilecek bir sütun adını aktarmak için {{ col_var }} ("süslü parantez" veya "sarma" olarak adlandırılır) kullanın. Bu, çoğu dplyr işlev programlama senaryosu için önerilen yaklaşımdır.

library(dplyr)

df <- data.frame(
  group = c('A','A','B','B'),
  sales = c(100, 120, 200, 180),
  costs = c(60, 70, 110, 90)
)

# Function using {{ }}
group_mean <- function(data, group_col, value_col) {
  data %>%
    group_by({{ group_col }}) %>%
    summarize(mean_val = mean({{ value_col }}), .groups = 'drop')
}

group_mean(df, group, sales)
group_mean(df, group, costs)

Çıktıdaki Sütun Adları için {{ }}

Çıktı sütunlarını dinamik olarak adlandırmak için := işlecinin sol tarafında da {{ }} kullanabilirsiniz. := işleci (mors işleci), dplyr fiilleri içindeki atamaların sol tarafında değişken adlarının kullanılmasına olanak tanır.

library(dplyr)

df <- data.frame(a=1:4, b=c(2,4,6,8))

# Dynamic output column name
compute_mean <- function(data, col) {
  col_name <- paste0('mean_', deparse(substitute(col)))
  data %>% summarize('{col_name}' := mean({{ col }}))
}

compute_mean(df, a)
compute_mean(df, b)

.data Zamiri

.data[['col_name']], bir dize değişkeni kullanarak sütun seçmenizi sağlar. dplyr'a sütunu geçerli veri çerçevesinde aramasını açıkça söyler. Sütun adlarını karakter dizeleri olarak tuttuğunuzda kullanışlıdır.

library(dplyr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85, 92, 78),
  grade = c('B','A','C')
)

# Using .data with a string variable
get_summary <- function(data, col_name) {
  data %>%
    summarize(
      n = n(),
      mean_val = mean(.data[[col_name]])
    )
}

get_summary(df, 'score')

across() — Birden Çok Sütuna Uygulama

mutate() veya summarize() içinde kullanılan across(cols, fns), bir işlevi aynı anda birden çok sütuna uygular. Sütunları tidyselect yardımcılarıyla seçin: starts_with(), where(is.numeric), everything() vb.

library(dplyr)

df <- data.frame(
  id = 1:3,
  sales_q1 = c(100, 200, 150),
  sales_q2 = c(120, 180, 160),
  cost_q1 = c(60, 110, 80),
  cost_q2 = c(70, 100, 85)
)

# Summarize all numeric columns except 'id'
df %>%
  summarize(across(where(is.numeric) & !id, mean))

across() ile Adlandırılmış İşlevler

Sütun başına birden çok istatistik hesaplamak için across() işlevine adlandırılmış işlevlerden oluşan bir liste aktarın. Çıktı sütunları col_fn biçiminde adlandırılır. Adlandırma desenini özelleştirmek için .names kullanın.

library(dplyr)

df <- data.frame(
  x = c(10, 20, 30, 40),
  y = c(5, 15, 25, 35)
)

# Compute mean and sd for both columns
df %>%
  summarize(across(
    c(x, y),
    list(mean = mean, sd = sd),
    .names = '{.col}_{.fn}'
  ))

mutate() İçinde across()

mutate() içinde across() kullanmak, birden çok sütunu eş zamanlı olarak dönüştürür. Böylece aynı dönüşümü her sütun için ayrı ayrı tekrarlamanız gerekmez.

library(dplyr)

df <- data.frame(
  id = 1:3,
  revenue = c(1000, 2000, 1500),
  cost = c(600, 1100, 800),
  tax = c(100, 200, 150)
)

# Round all numeric columns except id to nearest 10
df %>%
  mutate(across(where(is.numeric) & !id,
                ~round(., -2)))

pick() — İşlemler için Sütun Seçme

pick() (dplyr 1.1+), sütunların bir alt kümesini küçük bir veri çerçevesi olarak seçer; bu, veri çerçevesi bekleyen işlevlere aktarım için kullanışlıdır. mutate() ve summarize() içinde çalışır.

library(dplyr)

df <- data.frame(
  id = 1:3,
  a = c(1, 2, 3),
  b = c(4, 5, 6),
  c_val = c(7, 8, 9)
)

# Use pick() to compute row-wise mean across selected columns
df %>%
  mutate(
    row_mean = rowMeans(pick(a, b, c_val)),
    row_max = do.call(pmax, pick(a, b, c_val))
  )

Yeniden Kullanılabilir dplyr İşlevleri Yazma

{{ }}, .data[[]] ve across() bileşenlerini birleştirerek güçlü, yeniden kullanılabilir analiz işlevleri yazabilirsiniz. Temel kalıp şudur: sütun adlarını tırnaksız bağımsız değişkenler ({{ }} kullanarak) veya dizeler (.data[[]] kullanarak) olarak kabul edin.

library(dplyr)

df <- data.frame(
  region = c('East','East','West','West'),
  product = c('A','B','A','B'),
  revenue = c(100, 200, 150, 250),
  units = c(10, 15, 12, 20)
)

# Flexible grouped summary function
group_stats <- function(data, ..., metric) {
  data %>%
    group_by(...) %>%
    summarize(
      total = sum({{ metric }}),
      average = mean({{ metric }}),
      .groups = 'drop'
    )
}

group_stats(df, region, metric = revenue)
group_stats(df, region, product, metric = units)

Tidy Seçim Yardımcıları

tidyselect yardımcıları across(), select() ve pick() içinde çalışır: starts_with(), ends_with(), contains(), matches(), num_range(), where(predicate) ve everything().

library(dplyr)

df <- data.frame(
  id = 1:3,
  score_2022 = c(80,85,90),
  score_2023 = c(82,88,91),
  score_2024 = c(85,90,93),
  category = c('A','B','A')
)

# Select all score columns and compute their means
df %>%
  summarize(
    across(starts_with('score'), mean),
    n = n()
  )

Tidy Eval Kalıplarını Birleştirme

Gerçek dünyadaki dplyr işlevleri genellikle grup değişkenleri için {{ }}, birden çok ölçüm için across() ve dize biçimindeki sütun adları için .data[[]] kullanır. Her kalıbı ne zaman kullanacağınızı anlamak, kodunuzu esnek ve doğru hâle getirir.

library(dplyr)

df <- data.frame(
  dept = c('HR','HR','Eng','Eng'),
  salary = c(60000, 65000, 100000, 110000),
  bonus = c(5000, 6000, 15000, 18000)
)

# String-based column selection with .data
summarize_column <- function(data, group_col, value_col_name) {
  data %>%
    group_by(.data[[group_col]]) %>%
    summarize(
      mean = mean(.data[[value_col_name]]),
      total = sum(.data[[value_col_name]]),
      .groups = 'drop'
    )
}

summarize_column(df, 'dept', 'salary')
summarize_column(df, 'dept', 'bonus')

Hızlı Kontrol

Özel bir işlevin içinde, bir sütun adını dplyr'a tırnaksız bağımsız değişken olarak aktarmanın doğru yolu nedir?

Özet: Tidy Değerlendirme

dplyr ile programlama için temel noktalar:

  • {{ col }} — işlevlerdeki tırnaksız sütun adı bağımsız değişkenlerini sarar
  • .data[['col_name']] — sütunlara dize değişkeni adıyla erişir
  • := mors işleci — dinamik çıktı adları için {{ }} veya yapıştırma dizeleriyle kullanılır
  • across(cols, fns) — işlevleri aynı anda birden çok sütuna uygular
  • pick(cols) — satır bazlı işlemler için sütunları alt veri çerçevesi olarak seçer
  • tidyselect yardımcıları: starts_with(), where(), contains(), everything()
library(dplyr)

df <- data.frame(
  group = c('A','A','B','B'),
  v1 = c(10, 20, 30, 40),
  v2 = c(5, 15, 25, 35)
)

# Reusable function using {{ }} + across
group_summary <- function(data, grp) {
  data %>%
    group_by({{ grp }}) %>%
    summarize(across(where(is.numeric), list(mean=mean, sum=sum)), .groups='drop')
}

group_summary(df, group)

Sıkça Sorulan Sorular

“Düzenli Değerlendirme: {{ }} ve .data” dersi ücretsiz mi?

Evet — “Düzenli Değerlendirme: {{ }} ve .data” 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.

“Düzenli Değerlendirme: {{ }} ve .data” dersinde ne öğreneceğim?

Sütun adlarını bağımsız değişken olarak güvenle kabul eden dplyr işlevleri yazı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 4. dersidir.

“Düzenli Değerlendirme: {{ }} ve .data” 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

  1. Gruplandırılmış Özetler ve group_by()
  2. Pencere İşlevleri: lag, lead, cumsum
  3. dplyr'da Çok Tablolu Birleştirmeler
  4. Düzenli Değerlendirme: {{ }} ve .data
← R Academy Sayfasına Dön