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.")
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 namavektor_ku
,mat
sebagai namamatriks_ku
, dandf
sebagai namadf_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.")
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 dalamfilm
);aktor
: sebuah vektor yang berisi nama-nama aktor utamanya (disimpan dalamakt
);ulasan
: sebuah data frame yang berisi beberapa review (disimpan dalamulas
).
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.")
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.")
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.
Rating | Komentar |
---|---|
9 | Entertaining In Every Way A Film Can Be |
8 | Turbo charged! |
9 | Filled with Energy |
8 | All Gas, No Brakes |
6 | It'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
dankomentar
, yang berisi informasi tentang ulasan yang disajikan pada tabel sebelumnya. - Carilah rerata vektor
rating
dan simpanlah sebagairrt_ulasan
. - Gabungkan vektor-vektor
rating
dankomentar
ke dalam sebuah data frame, dan namai data frame tersebut sebagaidf_ulasan
. - Buatlah sebuah daftar yang bernama
daftar_fordferr
yang berisijudul_film
,aktor_film
,df_ulasan
, danrrt_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!")
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
.