R Academy · Pelajaran

map() dan Variasi Bertipe

Terapkan fungsi pada daftar dengan map(), map_dbl(), map_chr(), dan map_lgl().

Pelajaran 1 dari 413 langkah

map() dan Variasi Bertipe adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Pemrograman Fungsional dengan purrr

Paket purrr menyediakan alat yang konsisten dan aman berdasarkan tipe untuk pemrograman fungsional dalam R. Alih-alih menulis perulangan for, Anda memetakan sebuah fungsi ke seluruh daftar atau vektor. Hasilnya adalah kode yang lebih bersih, lebih mudah dipahami, dan lebih mudah dikomposisikan.

library(purrr)

# A list of numbers
numbers <- list(1, 4, 9, 16, 25)

# Apply sqrt() to each element
result <- map(numbers, sqrt)
print(result)

map() — Selalu Mengembalikan Daftar

map(.x, .f) menerapkan fungsi .f ke setiap elemen .x dan mengembalikan sebuah daftar. Inputnya dapat berupa daftar, vektor, atau bingkai data (diiterasi berdasarkan kolom). Ini adalah varian map yang paling umum.

library(purrr)

# Map over a character vector
fruits <- c('apple', 'banana', 'cherry')

# nchar() counts characters in each string
result <- map(fruits, nchar)
print(result)  # Returns a list
print(class(result))

map_dbl() — Mengembalikan Vektor Numerik

map_dbl(.x, .f) memetakan .f ke seluruh .x dan mengembalikan sebuah vektor numerik (double). Jika hasil apa pun bukan satu nilai numerik, fungsi ini menghasilkan error—keamanan tipe ini membantu menemukan bug lebih awal.

library(purrr)

groups <- list(
  A = c(10, 20, 30),
  B = c(5, 15, 25, 35),
  C = c(100, 200)
)

# Compute mean for each group — returns a named numeric vector
means <- map_dbl(groups, mean)
print(means)
print(class(means))

map_chr() — Mengembalikan Vektor Karakter

map_chr(.x, .f) melakukan pemetaan dan mengembalikan sebuah vektor karakter. Ini berguna untuk mengekstrak atribut string, memformat hasil, atau membuat jalur file. Fungsi tersebut harus mengembalikan satu string untuk setiap elemen.

library(purrr)

models <- list(
  m1 = lm(mpg ~ wt, data=mtcars),
  m2 = lm(mpg ~ hp, data=mtcars),
  m3 = lm(mpg ~ cyl, data=mtcars)
)

# Extract the formula from each model as a string
map_chr(models, function(m) deparse(formula(m)))

map_lgl() — Mengembalikan Vektor Logika

map_lgl(.x, .f) mengembalikan sebuah vektor logika berisi nilai TRUE/FALSE. Ini sangat sesuai untuk menguji kondisi pada seluruh daftar—misalnya, memeriksa elemen mana yang memenuhi kriteria.

library(purrr)

datasets <- list(
  df1 = data.frame(x=1:3, y=c(NA,2,3)),
  df2 = data.frame(x=1:3, y=4:6),
  df3 = data.frame(x=c(NA,NA,3), y=1:3)
)

# Does each data frame contain any NA values?
map_lgl(datasets, function(df) anyNA(df))

map_int() — Mengembalikan Vektor Integer

map_int(.x, .f) mengembalikan sebuah vektor integer. Gunakan ini ketika fungsi Anda mengembalikan hitungan, indeks, atau hasil bilangan bulat lainnya. Catatan: dalam R, length() dan nrow() mengembalikan integer.

library(purrr)

my_lists <- list(
  a = 1:10,
  b = letters[1:5],
  c = c(TRUE, FALSE, TRUE, TRUE)
)

# Count elements in each list item
map_int(my_lists, length)

map_df() / map_dfr() — Mengembalikan Bingkai Data

map_df(.x, .f) (alias: map_dfr()) menerapkan .f dan menggabungkan hasil berdasarkan baris menjadi satu bingkai data. Fungsi tersebut harus mengembalikan bingkai data atau tibble untuk setiap elemen. map_dfc() menggabungkannya berdasarkan kolom.

library(purrr)

files <- c('sales_q1', 'sales_q2', 'sales_q3')

# Simulate reading and labeling each file
map_df(files, function(f) {
  data.frame(
    file = f,
    rows = sample(50:100, 1),
    cols = 5
  )
})

Fungsi Anonim dengan ~

purrr mendukung singkatan formula yang ringkas untuk fungsi anonim: ~expr, dengan .x yang merujuk pada elemen saat ini. Dengan demikian, Anda tidak perlu menulis function(x) expr dan kode menjadi lebih ringkas. Kedua gaya tersebut bekerja secara identik.

library(purrr)

numbers <- list(1, 4, 9, 16, 25)

# Three equivalent ways:
result1 <- map(numbers, function(x) x^2)
result2 <- map(numbers, ~.x^2)
result3 <- map_dbl(numbers, ~.x^2)

print(result2)
print(result3)

Pemetaan pada Daftar Bernama

Ketika .x adalah daftar atau vektor bernama, keluaran dari map() mempertahankan nama-nama tersebut. map_dbl() dan varian bertipe lainnya juga meneruskan nama, sehingga hasilnya dapat menjelaskan dirinya sendiri.

library(purrr)

region_data <- list(
  East = c(100, 120, 115, 130),
  West = c(200, 195, 210, 205),
  North = c(80, 85, 90, 88)
)

# Named results
map_dbl(region_data, mean)

Menggunakan map() dengan Kolom Bingkai Data

Bingkai data adalah daftar kolom. map(df, fn) menerapkan fn pada setiap kolom. Jika dipadukan dengan map_dbl(), cara ini menjadi metode ringkas untuk menghitung statistik pada setiap kolom sekaligus.

library(purrr)

df <- data.frame(
  score_a = c(85, 90, 78, 92),
  score_b = c(88, 85, 80, 95),
  score_c = c(92, 88, 84, 90)
)

# Mean of every column
map_dbl(df, mean)

Menumpuk Pemanggilan map()

Anda dapat menumpuk pemanggilan map() untuk iterasi bertingkat—map luar pada grup dan map dalam pada parameter. Cara ini menggantikan perulangan for bertingkat dengan struktur yang bersih dan dapat dikomposisikan. Batasi kedalaman penumpukan hingga 2 tingkat agar mudah dibaca.

library(purrr)

groups <- list(A = 1:5, B = 6:10)
functions <- list(mean=mean, sd=sd, min=min)

# Apply each function to each group
map(groups, function(g) {
  map_dbl(functions, function(f) f(g))
})

Pemeriksaan Singkat

Apa perbedaan utama antara map() dan map_dbl()?

Rangkuman: map() dan Varian Bertipe

Hal-hal penting tentang map() dan varian bertipe:

  • map(.x, .f) — selalu mengembalikan daftar; paling fleksibel
  • map_dbl() — mengembalikan vektor numeric; menghasilkan galat jika tipenya salah
  • map_chr() — mengembalikan vektor karakter
  • map_lgl() — mengembalikan vektor logika
  • map_int() — mengembalikan vektor bilangan bulat
  • map_df() / map_dfr() — menggabungkan hasil berdasarkan baris menjadi bingkai data
  • Singkatan ~.x — sintaks fungsi anonim yang ringkas
  • Masukan bernama secara otomatis menghasilkan keluaran bernama
library(purrr)

# Typed map showcase
data_list <- list(
  group_A = c(10, 20, 30),
  group_B = c(5, 15),
  group_C = c(100, 200, 300, 400)
)

cat('Counts:', map_int(data_list, length), '\n')
cat('Means: ', map_dbl(data_list, mean), '\n')
cat('Any>50:', map_lgl(data_list, ~any(.x > 50)), '\n')
Gratis untuk memulai

Belajar R dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
43
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “map() dan Variasi Bertipe” gratis?

Ya — teks lengkap “map() dan Variasi Bertipe” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “map() dan Variasi Bertipe”?

Terapkan fungsi pada daftar dengan map(), map_dbl(), map_chr(), dan map_lgl(). Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “map() dan Variasi Bertipe” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. map() dan Variasi Bertipe
  2. map2() dan pmap() untuk Banyak Input
  3. reduce(), accumulate(), dan walk()
  4. keep(), discard(), dan Penyaringan Daftar
← Kembali ke R Academy