Pengantar Pemrograman R

Daftar

Tidak seperti vektor, sebuah daftar atau list dapat berisi komponen-komponen yang jenis datanya berbeda-beda. Di subbab ini, Anda akan belajar bagaimana membuat dan menamai daftar, serta memilih bagian tertentu dari sebuah daftar.

Selayang Pandang Tentang Daftar

Selamat! Sampai di sini, Anda telah familier dengan tiga struktur data berikut.

  • Vektor: dapat berisi nilai-nilai numerik, karakter, atau logika. Elemen-elemen dalam sebuah vektor semuanya memiliki jenis data yang sama.
  • Matriks: dapat memuat nilai-nilai numerik, karakter, atau logika. Elemen-elemen sebuah matriks semuanya berjenis data yang sama.
  • Data frame: dapat memuat nilai-nilai numerik, karakter, atau logika. Dalam sebuah kolom semua elemennya berjenis data sama, tetapi kolom yang berbeda dapat berisi data yang jenisnya berbeda.

Lumayan untuk yang baru mengenal R, bukan? Sekarang kita akan mempelajari struktur data berikutnya, yaitu daftar.

Sebuah daftar di R memungkinkan kita untuk menghimpun berbagai macam objek ke dalam satu nama (yaitu nama daftar tersebut) secara terurut. Objek tersebut dapat berupa matriks, vektor, data frame, bahkan daftar lain, dan lain sebagainya. Bahkan objek-objek tersebut tidak perlu berhubungan satu sama lain untuk dijadikan daftar.

Membuat Daftar

Mari kita buat daftar pertama kita! Kita gunakan fungsi list() seperti berikut.

daftar_ku <- list(komp1, komp2, ...)

Argumen-argumen dalam fungsi list() adalah komponen-komponennya. Ingat, komponen tersebut bisa berjenis apa saja.

Latihan 1.51

Buatlah sebuah daftar bernama daftar_ku yang berisi variabel-variabel vektor_ku, matriks_ku, dan df_ku sebagai komponen-komponennya.

# no pec # Vektor numerik dari 1 sampai 10 vektor_ku <- 1:10 # Matriks numerik dari 1 sampai 9 matriks_ku <- matrix(1:9, ncol = 3) # Sepuluh elemen pertama dari data frame mtcars df_ku <- mtcars[1:10,] # Buatlah daftar dengan komponen-komponen tersebut: daftar_ku <- # Vektor numerik dari 1 sampai 10 vektor_ku <- 1:10 # Matriks numerik dari 1 sampai 9 matriks_ku <- matrix(1:9, ncol = 3) # Sepuluh elemen pertama dari data frame mtcars df_ku <- mtcars[1:10,] # Buatlah daftar dengan komponen-komponen tersebut: daftar_ku <- list(vektor_ku, matriks_ku, df_ku) msg = "Jangan menghapus atau mengganti definisi variabel-variabel `vektor_ku`, `matriks_ku` atau `df_ku`!" ex() %>% check_object("vektor_ku", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("matriks_ku", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("df_ku", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("daftar_ku") %>% check_equal(incorrect_msg = "Sepertinya `daftar_ku` tidak berisi elemen-elemen yang tepat. Pastikan untuk memasukkan variabel-variabel `vektor_ku`, `matriks_ku` dan `df_ku` ke fungsi `list()`, dipisah dengan tanda koma dan terurut seperti itu.") success_msg("Luar biasa! Lanjut ke bagian berikutnya.")
Gunakan fungsi list() dengan input vektor_ku, matriks_ku, dan df_ku sebagai argumen-argumennya.

Membuat Sebuah Daftar Bernama

Kita akan mudah mengelola daftar kita ketika daftar tersebut bernama. Untuk memberikan nama terhadap tiap-tiap komponen daftar, kita dapat menggunakan kode berikut.

daftar_ku <- list(nama1 = komp1, 
                nama2 = komp2)

Kode tersebut akan memberi nama komponen-komponen daftar_ku dengan nama1, nama2, dan seterusnya. Jika Anda ingin menamai sebuah daftar setelah daftar itu selesai dibuat, Anda dapat menggunakan fungsi names() seperti yang telah kita lakukan terhadap vektor. Perintah berikut ekuivalen dengan yang kita lakukan sebelumnya.

daftar_ku <- list(komp1, komp2)
names(daftar_ku) <- c("nama1", "nama2")

Latihan 1.52

  • Ubahlah kode pada latihan sebelumnya (lihat editor) dengan menambahkan nama kepada komponen-komponennya. Gunakan vek sebagai nama vektor_ku, mat sebagai nama matriks_ku, dan df sebagai nama df_ku.
  • Tampilkan hasilnya agar Anda dapat mengamati hasilnya.
# no pec # Vektor numerik dari 1 sampai 10 vektor_ku <- 1:10 # Matriks numerik dari 1 sampai 9 matriks_ku <- matrix(1:9, ncol = 3) # Sepuluh elemen pertama dari data frame mtcars df_ku <- mtcars[1:10,] # Modifikasi perintah list() untuk memberikan nama setiap komponennya daftar_ku <- list(vek = vektor_ku, mat = matriks_ku, df = df_ku) # Tampilkan hasilnya # Vektor numerik dari 1 sampai 10 vektor_ku <- 1:10 # Matriks numerik dari 1 sampai 9 matriks_ku <- matrix(1:9, ncol = 3) # Sepuluh elemen pertama dari data frame mtcars df_ku <- mtcars[1:10,] # Modifikasi perintah list() untuk memberikan nama setiap komponennya daftar_ku <- list(vektor_ku, matriks_ku, df_ku) # Tampilkan hasilnya daftar_ku msg = "Jangan menghapus atau mengganti definisi variabel-variabel `vektor_ku`, `matriks_ku` atau `df_ku`!" ex() %>% check_object("vektor_ku", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("matriks_ku", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("df_ku", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("daftar_ku") %>% check_equal(incorrect_msg = "Sepertinya `daftar_ku` tidak berisi elemen-elemen yang tepat.") ex() %>% check_object("daftar_ku") %>% check_equal(eq_condition = "equal",incorrect_msg = "Sepertinya `daftar_ku` tidak memuat penamaan yang tepat untuk komponen-komponennya. Pastikan secara terurut Anda menggunakan nama `vek`, `mat` dan `df`. Lihatlah Hint jika Anda mengalami kesulitan.") success_msg("Jempol! Sekarang Anda tidak hanya mengetahui cara membuat sebuah daftar, Anda juga dapat memberinya nama. Kemampuan ini sangatlah berguna dalam praktik mengelola data. Lanjutkan ke pembahasan berikutnya.")
Cara pertama pemberian nama sebuah daftar adalah yang paling mudah. Kodenya seperti ini: daftar_ku <- list(vek = vektor_ku). Lanjutkan untuk mengisi komponen kedua dan ketiga.

Sekarang kita akan membuat sebuah daftar untuk menyimpan informasi tentang film yang berjudul "The Dark Knight"!

Tiga variabel telah dibuat untuk Anda: film, akt, dan ulas di dalam editor. Anda tentu bisa mengeksplorasinya melalui editor tersebut. Selanjutnya, silakan buatlah sebuah daftar berdasarkan ketiga variabel tersebut di Latihan 1.53.

Latihan 1.53

Lengkapilah kode di dalam editor untuk membuat daftar_dark_knight. Tiga elemen yang dimuatnya:

  • judulfilm: data teks yang menunjukkan judul filmnya (disimpan dalam film);
  • aktor: sebuah vektor yang berisi nama-nama aktor utamanya (disimpan dalam akt);
  • ulasan: sebuah data frame yang berisi beberapa review (disimpan dalam ulas).

Jangan lupa untuk memberi nama setiap komponennya dengan tepat. Nama-namanya adalah judulfilm, aktor, dan ulasan.

film <- "The Dark Knight" akt <- c("Christian Bale", "Heath Ledger", "Aaron Eckhart", "Michael Caine", "Maggie Gyllenhaal") sumber <- c("IMDb1","IMDb2","IMDb3") komentar <- c("The Batman of our dreams! So much more than a comic book movie", "9.4 Top Contender for 'Best Superhero Movie'", "Really good but not as 4th best movie of all time. That's just clear.") rating <- c(10, 9, 8) ulas <- data.frame(rating, sumber, komentar) rm(rating, sumber, komentar) # Variabel-variabel film, akt, dan ulas telah tersedia # Selesaikan kodenya untuk membuat daftar_dark_knight daftar_dark_knight <- list(judulfilm = film) # Variabel-variabel film, akt, dan ulas telah tersedia # Selesaikan kodenya untuk membuat daftar_dark_knight daftar_dark_knight <- list(judulfilm = film, aktor = akt, ulasan = ulas) msg = "Jangan menghapus atau mengganti pendefinisian variabel-variabel yang telah tersedia!" ex() %>% check_object("film", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("ulas", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("akt", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_object("daftar_dark_knight") %>% check_equal(incorrect_msg = "Sepertinya `daftar_dark_knight` tidak berisi elemen-elemen yang tepat: elemen pertamanya seharusnya `film`, yang kedua `akt`, dan yang ketiga `ulas`.") ex() %>% check_object("daftar_dark_knight") %>% check_equal(eq_condition = "equal",incorrect_msg = "Sepertinya `daftar_dark_knight` penamaan komponen-komponennya masih keliru: namai elemen pertamanya `judulfilm`, elemen kedua `aktor`, dan elemen ketiga `ulasan`.") success_msg("Luar biasa! Anda mengetahui bagaimana membuat dan menamai sebuah daftar. Seperti pada subbab-subbab sebelumnya, mari belajar bagaimana memilih elemen-elemen sebuah daftar. Silakan lanjut ke bagian berikutnya.")
Bagian pertama jawabannya adalah daftar_dark_knight <- list(judulfilm = film). Silakan inputkan akt dan ulas, dan namai dengan tepat.

Memilih Elemen dari Sebuah Daftar

Sebuah daftar seringkali tersusun atas berbagai macam elemen dan komponen. Dari daftar tersebut, kita juga ingin mendapatkan elemen atau komponen tertentu.

Salah satu cara untuk mendapatkan sebuah komponen adalah dengan menggunakan posisinya di dalam daftar. Misalnya, untuk memilih komponen pertama dalam daftar_dark_knight, kita dapat menggunakan kode seperti ini.

daftar_dark_knight[[1]]

Penting untuk diingat: memilih elemen dari sebuah vektor dilakukan dengan satu tanda kurung siku [ ], tetapi memilih komponen dari sebuah daftar kita gunakan dua tanda kurung siku [[ ]]. Jangan sampai terbalik!

Kita juga dapat menyebutkan nama komponennya, dengan [[ ]] atau tanda $. Kode berikut sama-sama akan memilih data frame yang merepresentasikan ulasan.

daftar_dark_knight[["ulasan"]]
daftar_dark_knight$ulasan

Selain memilih komponen, kita juga dapat memilih elemen dari komponen tersebut. Misalnya, dengan daftar_dark_knight[[2]][1] kita memilih elemen pertama ([1]) dari komponen kedua (daftar_dark_knight[[2]], yaitu aktor). Jika Anda cek, Anda akan mendapatkan Christian Bale.

Latihan 1.54

  • Dari daftar_dark_knight, pilihlah vektor yang merepresentasikan aktor-aktornya. Tampilkan vektor ini.
  • Dari daftar yang sama, pilihlah elemen kedua dari vektor yang merepresentasikan aktor-aktor tersebut. Tampilkan juga hasilnya.
film <- "The Dark Knight" akt <- c("Christian Bale", "Heath Ledger", "Aaron Eckhart", "Michael Caine", "Maggie Gyllenhaal") sumber <- c("IMDb1","IMDb2","IMDb3") komentar <- c("The Batman of our dreams! So much more than a comic book movie", "9.4 Top Contender for 'Best Superhero Movie'", "Really good but not as 4th best movie of all time. That's just clear.") rating <- c(10, 9, 8) ulas <- data.frame(rating, sumber, komentar) daftar_dark_knight <- list(judulfilm = film, aktor = akt, ulasan = ulas) rm(rating, sumber, komentar) # daftar_dark_knight telah tersedia untuk Anda # Tampilkan vektor yang menunjukkan aktor-aktornya # Tampilkan elemen kedua dari vektor yang menunjukkan aktor-aktornya # daftar_dark_knight telah tersedia untuk Anda # Tampilkan vektor yang menunjukkan aktor-aktornya daftar_dark_knight$aktor # Tampilkan elemen kedua dari vektor yang menunjukkan aktor-aktornya daftar_dark_knight$aktor[2] msg <- "Jangan menghapus atau menindih pendefinisian `daftar_dark_knight` yang telah tersedia!" ex() %>% check_object("daftar_dark_knight", undefined_msg = msg) %>% check_equal(incorrect_msg = msg) ex() %>% check_output_expr("daftar_dark_knight$aktor", missing_msg = "Sudahkah Anda memilih dan menampilkan vektor yang merepresentasikan aktor-aktornya? Anda, misalnya, dapat menggunakan `daftar_dark_knight$aktor`.") ex() %>% check_output_expr("daftar_dark_knight$aktor[2]", missing_msg = "Untuk memilih elemen kedua dari vektor aktor, Anda perlu merangkai pemilihannya: `daftar_dark_knight$aktor` menunjukkan vektor aktor-aktornya, sehingga Anda dapat menggunakan `[2]` untuk memilih elemen keduanya.") success_msg("Hebat! Pemilihan elemen dan komponen dari sebuah daftar mudah, bukan? Silakan lanjut ke pembahasan berikutnya.")
Untuk memilih elemen ketiga dari vektor yang merepresentasikan aktor-aktornya, Anda dapat menggunakan daftar_dark_knight$aktor[3]. Bagaimana jika elemen kedua yang ingin dipilih?

Berikut ini adalah ulasan film yang juga dibintangi oleh Christian Bale, Ford v Ferrari.

RatingKomentar
9Entertaining In Every Way A Film Can Be
8Turbo charged!
9Filled with Energy
8All Gas, No Brakes
6It's okay

Akan sangat bermanfaat jika kita dapat mengumpulkan berbagai macam informasi terkait dengan sebuah film, seperti judul, aktor, dan ulasannya, kemudian menyimpannya ke dalam sebuah variabel. Karena informasi tersebut memiliki bentuk-bentuk yang berbeda, kita dapat menggabungkannya ke dalam sebuah daftar.

Dua variabel, judul_film dan aktor_film, telah tersedia di dalam editor. Variabel judul_film berisi judul dari film yang telah kita singgung sebelumnya dan aktor_film berisi nama-nama aktor yang membintangi film tersebut.

Latihan 1.55

  • Buatlah dua vektor, rating dan komentar, yang berisi informasi tentang ulasan yang disajikan pada tabel sebelumnya.
  • Carilah rerata vektor rating dan simpanlah sebagai rrt_ulasan.
  • Gabungkan vektor-vektor rating dan komentar ke dalam sebuah data frame, dan namai data frame tersebut sebagai df_ulasan.
  • Buatlah sebuah daftar yang bernama daftar_fordferr yang berisi judul_film, aktor_film, df_ulasan, dan rrt_ulasan. Tampilkan daftar tersebut.
judul_film <- "Ford v Ferrari" aktor_film <- c("Matt Damon", "Christian Bale", "Jon Bernthal", "Caitríona Balfe", "Josh Lucas", "Noah Jupe") # Gunakan tabel sebelumnya untuk membuat vektor rating dan komentar rating <- c(9, 8, 9, 8, ___ komentar <- c("Entertaining In Every Way A Film Can Be", "Turbo charged!", "Filled with Energy", "All Gas, No Brakes", ___ # Simpanlah rerata ratingnya sebagai rrt_ulasan # Gabungkan rating dan komentar menjadi data frame df_ulasan # Buat dan tampilkan sebuah daftar yang bernama daftar_fordferr # Gunakan tabel sebelumnya untuk membuat vektor rating dan komentar rating <- c(9, 8, 9, 8, 6) komentar <- c("Entertaining In Every Way A Film Can Be", "Turbo charged!", "Filled with Energy", "All Gas, No Brakes", "It's okay") # Simpanlah rerata ratingnya sebagai rrt_ulasan rrt_ulasan <- mean(rating) # Gabungkan rating dan komentar menjadi data frame df_ulasan df_ulasan <- data.frame(rating, komentar) # Buat dan tampilkan sebuah daftar yang bernama daftar_fordferr daftar_fordferr <- list(judul_film, aktor_film, df_ulasan, rrt_ulasan) daftar_fordferr msg <- "Jangan mengganti atau mengubah objek-objek yang telah disediakan." ex() %>% check_object("judul_film") %>% check_equal(eq_condition = "equal", incorrect_msg = msg) ex() %>% check_object("aktor_film") %>% check_equal(eq_condition = "equal", incorrect_msg = msg) ex() %>% check_object("rating") %>% check_equal(eq_condition = "equal", incorrect_msg = "Apakah Anda membuat vektor `rating` dengan benar?") ex() %>% check_object("komentar") %>% check_equal(eq_condition = "equal", incorrect_msg = "Apakah Anda membuat vektor `komentar` dengan benar?") ex() %>% check_correct( check_object(.,"rrt_ulasan") %>% check_equal(eq_condition = "equal", incorrect_msg = "Apakah Anda membuat objek `rrt_ulasan` dengan benar?"), check_function(.,"mean") %>% check_arg("x") %>% check_equal() ) ex() %>% check_correct( check_object(.,"df_ulasan") %>% check_equal(eq_condition = "equal", incorrect_msg = "Apakah Anda membuat `df_ulasan` dengan benar?"), check_function(.,"data.frame") %>% { check_arg(.,"..1") %>% check_equal() check_arg(.,"..2") %>% check_equal() } ) ex() %>% check_correct( check_object(.,"daftar_fordferr") %>% check_equal(eq_condition = "equal", incorrect_msg = "Apakah Anda membuat `daftar_fordferr` dengan benar?"), check_function(.,"list") %>% { check_arg(.,"..1") %>% check_equal() check_arg(.,"..2") %>% check_equal() check_arg(.,"..3") %>% check_equal() check_arg(.,"..4") %>% check_equal() } ) ex() %>% check_output_expr("daftar_fordferr", missing_msg = "Apakah Anda sudah menampilkan `daftar_fordferr`?") success_msg("Luar biasa! Anda telah berhasil membuat daftar tentang informasi film lainnya, dan menggabungkan berbagai komponen ke dalam daftar tersebut. Selamat telah menyelesaikan bab Pengantar Pemrograman R!")
- Gunakan fungsi c() untuk membuat vektor. - Untuk mencari rerata suatu vektor, inputkan nama vektor tersebut ke fungsi mean(). - Gunakan fungsi data.frame() untuk membuat data frame df_ulasan.

Uji Pengetahuan Anda

Kerjakan soal-soal tentang Daftar berikut dengan tepat!

Perintah berikut bertujuan untuk membuat sebuah daftar. Lengkapi bagian yang kosong!

(vektor_mu, matriks_mu)

Cermati soal berikut dan lengkapilan bagian yang kosong!

Anda membuat sebuah daftar dengan kode di bawah ini. Anda menamai komponen pertama sebagai "artis" dan komponen kedua sebagai "tahun_rilis".

daftar_lagu <- list( = art, = rilis)

Hasil dari daftar_mu[[2]][3] adalah ...

Anda memiliki sebuah daftar yang bernama daftar_mu. Kemudian Anda mengeksplorasinya dengan input-input tertentu, sehingga Anda mendapatkan luaran yang bersesuaian sebagai berikut.

> a[[1]]

[1] 1 2 3 4

> a[[2]]

[1] "a" "b" "c"

> a[[3]]

[1] TRUE FALSE FALSE