Lewati ke konten utama

40 Pertanyaan & Jawaban Wawancara Pemrograman R untuk Semua Tingkat

Pelajari 40 pertanyaan dasar wawancara pemrograman R beserta jawabannya untuk semua tingkat senioritas: pemula, menengah, dan lanjutan.
Diperbarui 28 Sep 2026  · 15 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Untuk meningkatkan peluang sukses dalam wawancara R, selalu bermanfaat mengetahui terlebih dahulu pertanyaan apa yang mungkin diajukan kepada Anda jika Anda sedang mencari kerja—atau pertanyaan apa yang dapat Anda ajukan kepada kandidat jika Anda adalah manajer perekrutan atau perekrut.

Artikel ini membahas 40 pertanyaan wawancara pemrograman R yang mendasar beserta jawabannya untuk semua tingkat senioritas, serta beberapa pertanyaan wawancara umum. Demi kemudahan, seluruh pertanyaan teknis dibagi menjadi tiga tingkat: pemula, menengah, dan lanjutan.

Sebagai sumber tambahan untuk persiapan wawancara pemrograman R Anda, pertimbangkan blog dan kursus bermanfaat berikut:

Pertanyaan Wawancara Umum Pemrograman R

Di awal wawancara R, pewawancara dapat menanyakan beberapa pertanyaan umum non-teknis tentang pengalaman keseluruhan kandidat dengan R. Misalnya:

  • Sudah berapa lama Anda bekerja dengan R?
  • Jenis tugas apa yang Anda lakukan di R?
  • Bagaimana Anda menilai tingkat kemahiran Anda dalam R?

Jika Anda sedang mencari kerja, Anda sebaiknya memikirkan pertanyaan-pertanyaan ini dan yang serupa sebelumnya dan menyiapkan jawaban Anda. Jangan khawatir jika Anda belum memiliki pengalaman kerja nyata dengan R: menjelaskan magang Anda dalam pemrograman R atau proyek R individu atau kelompok yang Anda selesaikan selama studi sudah memadai.

Selain itu, jika Anda melamar posisi tingkat pemula, pewawancara tidak selalu mengharapkan dari Anda pengalaman kerja yang luas (atau bahkan ada) dalam R. Ingat bahwa karena Anda diundang ke wawancara ini, perusahaan tersebut sudah menganggap resume Anda menarik.

Pertanyaan Wawancara Pemrograman R Tingkat Pemula

Mari mulai dengan beberapa pertanyaan teknis dasar R yang mungkin Anda hadapi dari calon pemberi kerja. Ini menuntut Anda menguasai dasar-dasar dan memiliki sedikit pengalaman praktis menggunakan R.

1. Apa itu R, dan apa karakteristik utamanya?

R adalah bahasa pemrograman dan lingkungan yang banyak digunakan untuk menyelesaikan masalah data science dan secara khusus dirancang untuk komputasi statistik dan visualisasi data. Karakteristik utamanya meliputi:

  • Sumber terbuka
  • Diinterpretasikan (mendukung pemrograman fungsional dan berorientasi objek)
  • Sangat mudah diperluas berkat koleksi paket data science yang besar
  • Fungsional dan fleksibel (pengguna dapat mendefinisikan fungsinya sendiri, serta menyetel berbagai parameter fungsi yang ada)
  • Kompatibel dengan banyak sistem operasi
  • Mudah diintegrasikan dengan bahasa dan kerangka kerja pemrograman lain
  • Memungkinkan komputasi statistik yang kuat
  • Menawarkan berbagai alat visualisasi data untuk membuat grafik berkualitas publikasi
  • Dilengkapi antarmuka baris perintah
  • Didukung oleh komunitas online yang kuat

2. Apa saja kelemahan menggunakan R?

  • Sintaks tidak intuitif sehingga kurva belajarnya curam, terutama bagi pemula dalam pemrograman
  • Relatif lambat
  • Penggunaan memori kurang efisien
  • Dokumentasi paket tidak konsisten dan sering sulit dibaca
  • Beberapa paket berkualitas rendah atau kurang terpelihara
  • Potensi masalah keamanan karena sifatnya yang sumber terbuka

3. Sebutkan dan definisikan beberapa tipe data dasar di R.

Terdapat beberapa tipe data di R, termasuk: 

  1. Numeric—bilangan desimal.
  2. Integer—bilangan bulat.
  3. Character—huruf, angka, atau simbol, atau kombinasi apa pun di antaranya, diapit tanda kutip ganda atau tunggal.
  4. Factor—kategori dari himpunan nilai yang mungkin, sering kali berurutan secara intrinsik.
  5. Logical—nilai Boolean TRUE dan FALSE, yang di tingkat rendah direpresentasikan sebagai 1 dan 0.

4. Sebutkan dan definisikan beberapa struktur data dasar di R.

  1. Vector—struktur data satu dimensi untuk menyimpan nilai dengan tipe data yang sama.
  2. List—struktur data multi-dimensi untuk menyimpan nilai dengan tipe data apa pun dan/atau struktur data lain.
  3. Matrix—struktur data dua dimensi untuk menyimpan nilai dengan tipe data yang sama.
  4. Data frame—struktur data dua dimensi untuk menyimpan nilai dengan tipe data apa pun, namun setiap kolom harus menyimpan nilai dengan tipe data yang sama.

5. Bagaimana cara mengimpor data di R?

Base R menyediakan fungsi-fungsi esensial untuk mengimpor data:

  • read.table()—fungsi paling umum di base R untuk mengimpor data, menerima data tabular dengan pemisah kolom jenis apa pun, termasuk pemisah spesifik seperti |.

  • read.csv()—file comma-separated values (CSV) dengan . sebagai pemisah desimal.

  • read.csv2()—file semicolon-separated values dengan , sebagai pemisah desimal.

  • read.delim()—file tab-separated values (TSV) dengan . sebagai pemisah desimal.

  • read.delim2()—file tab-separated values (TSV) dengan , sebagai pemisah desimal.

Dalam praktiknya, fungsi-fungsi ini dapat digunakan untuk mengimpor data tabular dengan pemisah kolom dan desimal jenis apa pun: menggunakannya untuk format file tertentu hanyalah soal konvensi dan pengaturan baku. Misalnya, berikut sintaks fungsi pertama: read.table(file, header = FALSE, sep = "", dec = "."). Fungsi lainnya memiliki parameter yang sama dengan pengaturan baku berbeda yang selalu dapat ditimpa secara eksplisit.

Paket tidyverse readr dan readxl menyediakan beberapa fungsi lain untuk mengimpor format file spesifik. Masing-masing fungsi tersebut dapat disetel lebih lanjut melalui berbagai parameter opsional.

readr

  • read_tsv()—file tab-separated values (TSV).

  • read_fwf()—file lebar-tetap (fixed-width).

  • read_log()—file web log.

  • read_table(), read_csv(), read_csv2(), dan read_delim()—setara dengan fungsi-fungsi base R.

readxl

  • read_excel()—file Excel.

  • read_csv()—setara dengan fungsi dari base R.

Untuk menggali lebih dalam pemuatan data di R, Anda dapat mengikuti tutorial Cara Mengimpor Data ke R.

6. Apa itu paket di R, dan bagaimana cara menginstal serta memuat paket?

Paket R adalah kumpulan fungsi, kode, data, dan dokumentasi, yang merupakan ekstensi dari bahasa pemrograman R dan dirancang untuk menyelesaikan jenis tugas tertentu. R hadir dengan sejumlah paket pra-instal, dan paket lain dapat dipasang oleh pengguna dari repositori. Repositori terpusat paling populer yang menyimpan ribuan paket R berbagai jenis disebut Comprehensive R Archive Network (CRAN).

Untuk memasang paket R langsung dari CRAN, kita perlu meneruskan nama paket yang diapit tanda kutip ke fungsi install.packages(), seperti: install.packages("package_name"). Untuk memasang lebih dari satu paket dari CRAN sekaligus, kita perlu menggunakan vektor karakter yang berisi nama paket yang diapit tanda kutip, seperti: install.packages(c("package_name_1", "package_name_2"). Untuk memasang paket R secara manual, kita perlu terlebih dahulu mengunduh paket sebagai file zip ke komputer dan kemudian menjalankan install.packages() function:

install.packages("path_to_the_locally_stored_zipped_package_file", repos=NULL, type="source")

Untuk memuat paket R yang telah dipasang ke lingkungan kerja R, kita dapat menggunakan fungsi library() atau require(). Keduanya menerima nama paket tanpa tanda kutip dan memuat paket tersebut, misalnya, library(caret). Namun, perilaku kedua fungsi ini berbeda saat tidak menemukan paket yang diperlukan: library() melempar galat dan menghentikan eksekusi program, sedangkan require() menampilkan peringatan dan melanjutkan eksekusi program.

7. Bagaimana cara membuat data frame di R?

1. Dari satu atau lebih vektor dengan panjang yang sama—menggunakan fungsi data.frame():

df <- data.frame(vector_1, vector_2)

2. Dari sebuah matriks—menggunakan fungsi data.frame():

df <- data.frame(my_matrix)

3. Dari daftar vektor dengan panjang yang sama—menggunakan fungsi data.frame():

df <- data.frame(list_of_vectors)

4. Dari data frame lain:

  • Untuk menggabungkan data frame secara horizontal (hanya jika data frame memiliki jumlah baris yang sama, dan rekornya sama serta dalam urutan yang sama) —menggunakan fungsi cbind():

df <- cbind(df1, df2)
  • Untuk menggabungkan data frame secara vertikal (hanya jika memiliki jumlah kolom yang sama dengan nama identik, tipe data yang sama, dan muncul dalam urutan yang sama) —menggunakan fungsi rbind():

df <- rbind(df1, df2)

8. Bagaimana menambahkan kolom baru ke data frame di R?

  1. Menggunakan simbol $:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
​
df$col_3 <- c(5, 1, 18, 16)
print(df)

Keluaran:

  col_1 col_2
1    10     a
2    11     b
3    12     c
4    13     d
  col_1 col_2 col_3
1    10     a     5
2    11     b     1
3    12     c    18
4    13     d    16
  1. Menggunakan tanda kurung siku:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
​
df["col_3"] <- c(5, 1, 18, 16)
print(df)

Keluaran:

  col_1 col_2
1    10     a
2    11     b
3    12     c
4    13     d
  col_1 col_2 col_3
1    10     a     5
2    11     b     1
3    12     c    18
4    13     d    16
  1. Menggunakan fungsi cbind():

df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
​
df <- cbind(df, col_3=c(5, 1, 18, 16))
print(df)

Keluaran:

 col_1 col_2
1    10     a
2    11     b
3    12     c
4    13     d
  col_1 col_2 col_3
1    10     a     5
2    11     b     1
3    12     c    18
4    13     d    16

Dalam ketiga kasus tersebut, kita dapat menetapkan sebuah nilai tunggal atau vektor atau menghitung kolom baru berdasarkan kolom yang sudah ada pada data frame itu atau data frame lainnya.

9. Bagaimana cara menghapus kolom dari data frame di R?

1. Dengan menggunakan fungsi select() dari paket dplyr dalam koleksi tidyverse. Nama setiap kolom yang akan dihapus dituliskan dengan tanda minus di depannya:

df <- select(df, -col_1, -col_3)

Jika kita justru memiliki terlalu banyak kolom untuk dihapus, lebih masuk akal mempertahankan kolom lain ketimbang menghapus kolom yang dimaksud. Dalam kasus ini, sintaksnya mirip, tetapi nama kolom yang dipertahankan tidak diawali tanda minus:

df <- select(df, col_2, col_4)

2. Dengan menggunakan fungsi bawaan subset() dari base R. Jika kita perlu menghapus hanya satu kolom, kita tetapkan parameter select dari fungsi tersebut dengan nama kolom yang diawali tanda minus. Untuk menghapus lebih dari satu kolom, kita tetapkan parameter ini dengan sebuah vektor yang berisi nama kolom yang diperlukan dan diawali tanda minus:

df <- subset(df, select=-col_1)
df <- subset(df, select=-c(col_1, col_3))

Jika kita justru memiliki terlalu banyak kolom untuk dihapus, lebih masuk akal mempertahankan kolom lain ketimbang menghapus kolom yang dimaksud. Dalam kasus ini, sintaksnya mirip, tetapi tanpa tanda minus:

df <- subset(df, select=col_2)
df <- subset(df, select=c(col_2, col_4))

10. Apa itu factor di R?

Factor di R adalah tipe data khusus yang menerima kategori (alias level) dari himpunan nilai yang telah ditentukan. Kategori ini tampak seperti karakter, tetapi di tingkat rendah disimpan sebagai integer. Sering kali, kategori tersebut memiliki urutan intrinsik. Misalnya, kolom dalam data frame yang berisi opsi skala Likert untuk menilai pandangan ("sangat setuju," "setuju," "agak setuju," "netral," "agak tidak setuju," "tidak setuju," "sangat tidak setuju") sebaiknya bertipe factor untuk menangkap urutan intrinsik ini dan merefleksikannya dengan tepat pada plot bertipe kategorikal.

11. Apa itu RStudio?

RStudio adalah IDE (integrated development environment) sumber terbuka yang banyak digunakan sebagai antarmuka grafis untuk bekerja dengan bahasa pemrograman R mulai versi 3.0.1. Ia memiliki banyak fitur bermanfaat yang membuatnya sangat populer di kalangan pengguna R:

  • Mudah digunakan
  • Fleksibel
  • Multifungsi
  • Memungkinkan pembuatan skrip yang dapat digunakan kembali
  • Melacak riwayat operasi
  • Melengkapi kode secara otomatis
  • Menawarkan bantuan rinci dan komprehensif untuk objek apa pun
  • Menyediakan akses mudah ke semua data impor dan objek yang dibangun
  • Memudahkan beralih antara terminal dan konsol
  • Memungkinkan pratinjau plot
  • Mendukung pembuatan dan berbagi proyek secara efisien
  • Dapat digunakan dengan bahasa pemrograman lain (Python, SQL, dll.)

Untuk mempelajari lebih lanjut apa itu RStudio serta cara memasang dan mulai menggunakannya, Anda dapat mengikuti Tutorial RStudio.

12. Apa itu R Markdown?

R Markdown adalah paket R gratis dan sumber terbuka yang menyediakan kerangka penulisan untuk membangun proyek data science. Dengan menggunakannya, kita dapat menulis satu file .rmd yang menggabungkan narasi, kode, dan plot data, lalu merender file tersebut ke format keluaran yang dipilih. Karakteristik utama R Markdown adalah:

  • Dokumen hasil dapat dibagikan, sepenuhnya reprodusibel, dan berkualitas publikasi.
  • Ragam keluaran dan format statis maupun dinamis yang luas, seperti HTML, PDF, Microsoft Word, dokumen interaktif, dasbor, laporan, artikel, buku, presentasi, aplikasi, situs web, templat yang dapat digunakan kembali, dll.
  • Pelacakan kontrol versi yang mudah.
  • Mendukung banyak bahasa pemrograman, termasuk R, Python, dan SQL.

13. Bagaimana membuat fungsi yang ditentukan pengguna di R?

Untuk membuat fungsi yang ditentukan pengguna di R, kita menggunakan kata kunci function dengan sintaks berikut:

function_name <- function(parameters){
    function body 
}
  1. Nama fungsi—nama objek fungsi yang akan digunakan untuk memanggil fungsi setelah didefinisikan.
  2. Parameter fungsi—variabel yang dipisahkan koma dan ditempatkan dalam tanda kurung yang akan diisi nilai argumen aktual setiap kali kita memanggil fungsi.
  3. Isi fungsi—potongan kode dalam kurung kurawal yang berisi operasi yang akan dijalankan dalam urutan tertentu pada argumen masukan setiap kali kita memanggil fungsi. Biasanya, isi fungsi berisi pernyataan return() (atau beberapa pernyataan) yang mengembalikan keluaran fungsi, atau pernyataan print() (atau beberapa pernyataan) untuk mencetak keluaran.

Contoh fungsi sederhana yang ditentukan pengguna di R:

my_function <- function(x, y){
    return(x + y)
}

14. Sebutkan beberapa paket visualisasi data populer di R.

  • ggplot2—paket visualisasi data R paling populer yang memungkinkan pembuatan berbagai jenis plot.
  • Lattice—untuk menampilkan data multivariat sebagai panel ubin (trellis) dari beberapa plot.
  • Plotly—untuk membuat grafik interaktif berkualitas publikasi.
  • highcharter—untuk plotting dinamis yang mudah, menawarkan banyak fitur, plugin, dan tema yang fleksibel; memungkinkan memplot berbagai objek R dengan satu fungsi.
  • Leaflet—untuk membuat peta interaktif.
  • ggvis—untuk membuat plot interaktif dan sangat dapat disesuaikan yang dapat diakses di browser mana pun menggunakan infrastruktur Shiny.
  • patchwork—untuk menggabungkan beberapa plot, biasanya dari berbagai jenis, dalam satu grafik.

Pertanyaan Wawancara Pemrograman R Tingkat Menengah

Untuk praktisi yang lebih berpengalaman, kemungkinan pewawancara akan mengajukan beberapa pertanyaan yang memerlukan pengetahuan R yang lebih mendalam. Berikut beberapa yang perlu dipersiapkan:

15. Bagaimana cara menetapkan nilai ke variabel di R?

  1. Menggunakan operator penugasan <-, mis., my_var <- 1—cara paling umum untuk menetapkan nilai ke variabel di R.

  2. Menggunakan operator sama dengan =, mis., my_var = 1—untuk menetapkan nilai ke argumen dalam definisi fungsi.

  3. Menggunakan operator penugasan ke kanan ->, mis., my_var -> 1—dapat digunakan dalam pipe.

  4. Menggunakan operator penugasan global, baik ke kiri (<<-) atau ke kanan (->>), mis., my_var <<- 1—untuk membuat variabel global di dalam definisi fungsi.

16. Apa persyaratan penamaan variabel di R?

  • Nama variabel dapat berupa kombinasi huruf, digit, titik, dan garis bawah. Tidak boleh berisi simbol lain, termasuk spasi.

  • Nama variabel harus diawali dengan huruf atau titik.

  • Jika nama variabel diawali titik, titik tersebut tidak boleh diikuti digit.

  • Kata-kata yang dipesan (reserved words) di R (TRUE, for, NULL, dll.) tidak dapat digunakan sebagai nama variabel.

  • Nama variabel peka huruf besar/kecil.

Dalam kursus Writing Efficient R Code, Anda akan menemukan praktik terbaik lebih lanjut untuk menulis kode di R.

17. Jenis loop apa saja yang ada di R, dan bagaimana sintaks masing-masing?

1. For loop—melakukan iterasi atas sebuah urutan sebanyak panjang urutan tersebut (kecuali digunakan pernyataan break dan/atau next) dan menjalankan set operasi yang sama pada setiap item urutan itu. Ini adalah jenis loop yang paling umum. Sintaks for loop di R sebagai berikut:

for (variable in sequence) {
    operations
}

2. While loop—menjalankan set operasi yang sama hingga kondisi logis yang telah ditentukan (atau beberapa kondisi) terpenuhi—kecuali digunakan pernyataan break dan/atau next. Tidak seperti for loop, kita tidak tahu sebelumnya berapa jumlah iterasi yang akan dijalankan while loop. Sebelum menjalankan while loop, kita perlu menetapkan sebuah variabel (atau beberapa variabel) dan kemudian memperbarui nilainya di dalam isi loop pada setiap iterasi. Sintaks while loop di R sebagai berikut:

variable assignment

while (logical condition) {
    operations
    variable update
}

3. Repeat loop—berulang kali menjalankan set operasi yang sama hingga kondisi penghentian (break) yang telah ditentukan (atau beberapa kondisi) terpenuhi. Untuk memperkenalkan kondisi tersebut, repeat loop harus berisi blok kode if-statement, yang pada gilirannya harus menyertakan pernyataan break di dalamnya. Seperti while loop, kita tidak tahu sebelumnya berapa jumlah iterasi yang akan dijalankan repeat loop. Sintaks repeat loop di R sebagai berikut:

repeat { 
    operations 
    if(break condition) {
        break
    }
}

Anda dapat membaca lebih lanjut tentang Loop di R melalui tutorial terpisah kami.

18. Bagaimana cara mengagregasikan data di R?

Untuk mengagregasikan data di R, kita menggunakan fungsi aggregate(). Fungsi ini memiliki parameter esensial berikut, dalam urutan ini:

  • x—data frame yang akan diagregasikan.

  • by—daftar factor untuk pengelompokan.

  • FUN—fungsi agregat untuk menghitung statistik ringkasan tiap grup (mis., mean, max, min, count, sum).

19. Bagaimana cara menggabungkan data di R?

1. Menggunakan fungsi cbind()—hanya jika data frame memiliki jumlah baris yang sama, dan rekornya sama serta dalam urutan yang sama:

df <- cbind(df1, df2)

2. Menggunakan fungsi rbind() untuk menggabungkan data frame secara vertikal—hanya jika memiliki jumlah kolom yang sama dengan nama identik, tipe data yang sama, dan muncul dalam urutan yang sama:

df <- rbind(df1, df2)

3. Menggunakan fungsi merge() untuk menggabungkan data frame berdasarkan kolom bersama, biasanya kolom ID:

  • Inner join:
df <- merge(df1, df2, by="ID")
  • Left join:
df <- merge(df1, df2, by="ID", all.x=TRUE)
  • Right join:
df <- merge(df1, df2, by="ID", all.y=TRUE)
  • Outer join:
df <- merge(df1, df2, by="ID", all=TRUE)

4. Menggunakan fungsi join() dari paket dplyr untuk menggabungkan data frame berdasarkan kolom bersama, biasanya kolom ID:

df <- join(df1, df2, by="ID", type="type_of_join")

Parameter type menerima salah satu nilai berikut: inner, left, right, atau full.

20. Bagaimana cara menggabungkan string di R?

Kita dapat menggabungkan dua atau lebih string di R menggunakan fungsi paste() atau cat(). Pendekatan pertama lebih populer. Keduanya menerima sejumlah string untuk digabung dan juga dapat menerima parameter opsional sep (bersama beberapa parameter opsional lainnya)—karakter atau deretan karakter yang akan memisahkan string yang digabung dalam string hasil (baku: spasi).

21. Bagaimana mentranspos data dua dimensi di R?

Kita dapat mentranspos data frame atau matriks di R sehingga kolom menjadi baris dan sebaliknya. Untuk tujuan ini, kita perlu menggunakan fungsi t() dari base R. Contohnya:

df <- data.frame(col_1=c(10, 20, 30), col_2=c(11, 22, 33))
print(df)
​
transposed_df <- t(df)
print(transposed_df)

Keluaran:

 col_1 col_2
1    10    11
2    20    22
3    30    33
      [,1] [,2] [,3]
col_1   10   20   30
col_2   11   22   33

22. Bagaimana merantai beberapa operasi sekaligus di R?

Kita dapat merantai beberapa operasi di R menggunakan operator pipe (%>%) yang disediakan oleh koleksi tidyverse. Menggunakan operator ini memungkinkan pembuatan pipeline fungsi di mana keluaran dari fungsi pertama diteruskan sebagai masukan ke fungsi kedua dan seterusnya hingga pipeline berakhir. Ini menghilangkan kebutuhan membuat variabel tambahan dan secara signifikan meningkatkan keterbacaan kode secara keseluruhan.

Contoh penggunaan operator pipe pada data frame:

df <- data.frame(a=1:4, b=11:14, c=21:24)
print(df)
​
df_new <- df %>% select(a, b) %>% filter(a > 2)
print(df_new)

Keluaran:

 a  b  c
1 1 11 21
2 2 12 22
3 3 13 23
4 4 14 24
  a  b
1 3 12
2 4 13

23. Jenis plot data apa yang dapat dibuat di R?

Karena visualisasi data adalah salah satu kekuatan bahasa pemrograman R, kita dapat membuat semua jenis plot data di R:

  • Jenis plot data umum:
    • Bar plot—menampilkan nilai numerik dari data kategorikal.
    • Line plot—menampilkan perkembangan suatu variabel, biasanya terhadap waktu.
    • Scatter plot—menampilkan hubungan antara dua variabel.
    • Area plot—berdasarkan line plot, dengan area di bawah garis diberi warna atau pola.
    • Pie chart—menampilkan proporsi setiap kategori dari data kategorikal sebagai bagian dari keseluruhan.
    • Box plot—menampilkan serangkaian statistik deskriptif dari data.
  • Jenis plot data lanjutan:
    • Violin plot—menampilkan statistik deskriptif dan bentuk distribusi data.
    • Heatmap—menampilkan besaran setiap titik data numerik dalam dataset.
    • Treemap—menampilkan nilai numerik dari data kategorikal, sering kali sebagai bagian dari keseluruhan.
    • Dendrogram—menampilkan hierarki internal dan pengelompokan data.
    • Bubble plot—menampilkan hubungan antara tiga variabel.
    • Hexbin plot—menampilkan hubungan dua variabel numerik pada dataset yang relatif besar.
    • Word cloud—menampilkan frekuensi kata dalam teks masukan.
    • Peta koroplet—menampilkan statistik tematik agregat dari geodata.
    • Circular packing chart—menampilkan hierarki internal data dan nilai titik data
    • dll.

Jalur keterampilan Data Visualization with R akan membantu Anda memperluas wawasan di bidang grafik R. Jika Anda lebih suka belajar visualisasi data di R dalam konteks yang lebih luas, jelajahi jalur karier yang lengkap dan ramah pemula Data Scientist with R.

24. Apa itu daur ulang vektor (vector recycling) di R?

Jika kita mencoba melakukan operasi pada dua vektor R dengan panjang berbeda, interpreter R akan mendeteksi vektor yang lebih pendek, mendaur ulang itemnya dalam urutan yang sama hingga panjang kedua vektor tersebut cocok, lalu melakukan operasi yang diperlukan pada vektor-vektor itu. Sebelum memulai daur ulang vektor, interpreter R akan menampilkan peringatan tentang ketidakcocokan panjang vektor di awal.

Misalnya, jika kita mencoba menjalankan penjumlahan berikut:

c(1, 2, 3, 4, 5) + c(1, 2, 3)

Vektor kedua, karena daur ulang vektor, akan diubah menjadi c(1, 2, 3, 1, 2). Maka, hasil akhir operasi ini adalah c(2, 4, 6, 5, 7).

Walau terkadang daur ulang vektor bisa bermanfaat (mis., ketika kita mengharapkan siklik nilai pada vektor), lebih sering hal ini tidak tepat dan menyesatkan. Karena itu, kita harus berhati-hati dan memperhatikan panjang vektor sebelum melakukan operasi pada keduanya.

25. Apa kegunaan pernyataan next dan break di R?

Pernyataan next digunakan untuk melewati iterasi tertentu dan melompat ke iterasi berikutnya jika kondisi tertentu terpenuhi. Pernyataan break digunakan untuk menghentikan dan keluar dari loop pada iterasi tertentu jika kondisi tertentu terpenuhi. Saat digunakan di salah satu loop dalam dari loop bertingkat, pernyataan ini hanya keluar dari loop dalam tersebut.

Kedua pernyataan next dan break dapat digunakan pada jenis loop apa pun di R: for, while, dan repeat. Keduanya juga bisa digunakan dalam loop yang sama, mis.:

for(i in 1:10) {
    if(i < 5)
        next
    if(i == 8)
        break
    print(i)}

Keluaran:

[1] 5
[1] 6
[1] 7

26. Apa perbedaan fungsi str() dan summary() di R?

Fungsi str() mengembalikan struktur sebuah objek R dan informasi umum tentangnya, yang isinya bergantung pada struktur data objek tersebut. Misalnya, untuk vektor, fungsi ini mengembalikan tipe data item, rentang indeks item, dan nilai item (atau beberapa nilai pertama, jika vektor terlalu panjang). Untuk data frame, fungsi ini mengembalikan kelasnya (data.frame), jumlah observasi dan variabel, nama kolom, tipe data setiap kolom, dan beberapa nilai pertama setiap kolom.

Fungsi summary() mengembalikan statistik ringkasan untuk sebuah objek R. Fungsi ini paling sering diterapkan pada data frame dan matriks, di mana ia mengembalikan nilai minimum, maksimum, mean, dan median, serta kuartil ke-1 dan ke-3 untuk setiap kolom numerik, sementara untuk kolom factor, ia mengembalikan jumlah tiap level.

27. Apa perbedaan fungsi subset() dan sample() di R?

Fungsi subset() di R digunakan untuk mengekstrak baris dan kolom dari data frame atau matriks, atau elemen dari vektor, berdasarkan kondisi tertentu, mis.: subset(my_vector, my_vector > 10).

Sebaliknya, fungsi sample() di R hanya dapat diterapkan pada vektor. Ia mengekstrak sampel acak dengan ukuran yang telah ditentukan dari elemen vektor, dengan atau tanpa pengembalian. Misalnya, sample(my_vector, size=5, replace=TRUE)

Pertanyaan Wawancara Pemrograman R Tingkat Lanjutan

28. Bagaimana membuat kolom baru dalam data frame di R berdasarkan kolom lain?

1. Menggunakan fungsi transform() dan ifelse() dari base R:

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Menambahkan kolom col_3 ke data frame df
df <- transform(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)

Keluaran:

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

2. Menggunakan fungsi with() dan ifelse() dari base R:

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Menambahkan kolom col_3 ke data frame df
df["col_3"] <- with(df, ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)

Keluaran:

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

3. Menggunakan fungsi apply() dari base R:

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Menambahkan kolom col_3 ke data frame df
df["col_3"] <- apply(df, 1, FUN = function(x) if(x[1] < x[2]) x[1] + x[2] else x[1] * x[2])
print(df) 

Keluaran:

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

4. Menggunakan fungsi mutate() dari paket dplyr dan fungsi ifelse() dari base R:

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Menambahkan kolom col_3 ke data frame df
df <- mutate(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)

Keluaran:

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

29. Bagaimana mengurai tanggal dari representasi string-nya di R?

Untuk mengurai tanggal dari representasi string-nya di R, kita sebaiknya menggunakan paket lubridate dari koleksi tidyverse. Paket ini menawarkan berbagai fungsi untuk mengurai string dan mengekstrak tanggal standar darinya berdasarkan pola tanggal awal pada string tersebut. Fungsi-fungsi tersebut adalah ymd(), ymd_hm(), ymd_hms(), dmy(), dmy_hm(), dmy_hms(), mdy(), mdy_hm(), mdy_hms(), dll., di mana y, m, d, h, m, dan s masing-masing adalah year, month, day, hours, minutes, dan seconds.

Misalnya, jika kita menjalankan fungsi dmy() dengan meneruskannya salah satu string "05-11-2023", "05/11/2023" atau "05.11.2023", yang mewakili tanggal yang sama, kita akan menerima hasil yang sama: 2023-11-05. Ini karena pada ketiganya, meskipun memiliki simbol pemisah berbeda, kita sebenarnya memiliki pola yang sama: hari diikuti bulan diikuti tahun.

30. Apa kegunaan fungsi switch() di R?

Fungsi switch() di R adalah pernyataan kendali cabang multi-arah yang mengevaluasi sebuah ekspresi terhadap item daftar. Sintaksnya sebagai berikut:

switch(expression, case_1, case_2, case_3....)

Ekspresi yang diteruskan ke fungsi switch() dapat bernilai angka atau string karakter, dan tergantung hal itu, perilaku fungsi berbeda.

1. Jika ekspresi bernilai angka, fungsi switch() mengembalikan item dari daftar berdasarkan kecocokan posisi (yaitu indeksnya sama dengan angka hasil evaluasi ekspresi). Jika angkanya lebih besar daripada jumlah item dalam daftar, switch() mengembalikan NULL. Misalnya:

switch(2, "circle", "triangle", "square")

Keluaran:

"triangle"

2. Jika ekspresi bernilai string karakter, fungsi switch() mengembalikan nilai berdasarkan namanya:

switch("red", "green"="apple", "orange"="carot", "red"="tomato", "yellow"="lemon")

Keluaran:

"tomato"

Jika ada beberapa kecocokan, nilai yang cocok pertama dikembalikan. Kita juga dapat menambahkan item tanpa nama sebagai argumen terakhir fungsi switch() yang akan menjadi opsi default jika tidak ada kecocokan. Jika opsi default ini tidak ditetapkan, dan tidak ada kecocokan, fungsi mengembalikan NULL.

Fungsi switch() adalah alternatif efisien dari rangkaian if-else yang panjang karena membuat kode kurang repetitif dan lebih mudah dibaca. Biasanya, fungsi ini digunakan untuk mengevaluasi satu ekspresi. Kita tetap dapat menulis konstruksi switch bertingkat yang lebih kompleks untuk mengevaluasi beberapa ekspresi. Namun, dalam bentuk ini, fungsi switch() cepat menjadi sulit dibaca dan kehilangan keunggulan utamanya dibandingkan konstruksi if-else.

31. Apa perbedaan fungsi apply(), lapply(), sapply(), dan tapply()?

Meskipun semua fungsi ini memungkinkan iterasi atas struktur data tanpa menggunakan loop dan melakukan operasi yang sama pada setiap elemennya, mereka berbeda dalam jenis masukan dan keluaran serta fungsi yang dijalankan.

  • apply()—menerima data frame, matriks, atau array dan mengembalikan vektor, daftar, matriks, atau array. Fungsi ini dapat diterapkan per baris, per kolom, atau keduanya.

  • lapply()—menerima vektor, daftar, atau data frame dan selalu mengembalikan daftar. Untuk masukan berupa data frame, fungsi ini hanya diterapkan per kolom.

  • sapply()—menerima vektor, daftar, atau data frame dan mengembalikan struktur data yang paling disederhanakan, yaitu vektor untuk masukan vektor, daftar untuk masukan daftar, dan matriks untuk masukan data frame.

  • tapply()—menghitung statistik ringkasan untuk berbagai factor (yaitu data kategorikal).

32. Sebutkan dan definisikan pernyataan kendali (control statements) di R.

Ada tiga kelompok pernyataan kendali di R: pernyataan kondisional, pernyataan loop, dan pernyataan loncatan.

Pernyataan kondisional:

  • if—menguji apakah kondisi tertentu benar dan menyediakan operasi yang dilakukan jika ya.

  • if-else—menguji apakah kondisi tertentu benar, menyediakan operasi jika ya dan set operasi lain jika tidak.

  • if... else if... else—menguji serangkaian kondisi satu per satu, menyediakan operasi untuk setiap kondisi jika benar, dan set operasi cadangan jika tidak ada kondisi yang benar.

  • switch—mengevaluasi sebuah ekspresi terhadap item daftar dan mengembalikan nilai dari daftar berdasarkan hasil evaluasi tersebut.

Pernyataan loop:

  • for—dalam for loop, melakukan iterasi atas sebuah urutan.

  • while—dalam while loop, memeriksa apakah kondisi logis yang ditentukan (atau beberapa kondisi) terpenuhi pada iterasi saat ini.

  • repeat—dalam repeat loop, terus melakukan set operasi yang sama hingga kondisi break yang ditentukan (atau beberapa kondisi) terpenuhi.

Pernyataan loncatan:

  • next—melewati iterasi tertentu dari suatu loop dan melompat ke iterasi berikutnya jika kondisi tertentu terpenuhi.

  • break—menghentikan dan keluar dari loop pada iterasi tertentu jika kondisi tertentu terpenuhi.

  • return—keluar dari suatu fungsi dan mengembalikan hasil.

33. Apa itu regular expression, dan bagaimana cara menggunakannya di R?

Regular expression, atau regex, di R atau bahasa pemrograman lain, adalah karakter atau rangkaian karakter yang mendeskripsikan pola teks tertentu dan digunakan untuk menambang data teks. Di R, ada dua cara utama bekerja dengan regular expression:

  1. Menggunakan base R dan fungsinya (seperti grep(), regexpr(), gsub(), regmatches(), dll.) untuk mencari, mencocokkan, mengekstrak, dan mengganti regex.
  2. Menggunakan paket khusus stringr dari koleksi tidyverse. Ini adalah cara yang lebih nyaman untuk bekerja dengan regex R karena fungsi-fungsi stringr memiliki nama dan sintaks yang lebih intuitif serta menawarkan fungsionalitas yang lebih luas.

Panduan Regular Expressions di R memberikan detail lebih lanjut tentang cara bekerja dengan regex di R.

34. Paket apa yang digunakan untuk machine learning di R?

  • caret—untuk berbagai algoritma klasifikasi dan regresi.
  • e1071—untuk support vector machines (SVM), naive Bayes classifier, bagged clustering, fuzzy clustering, dan k-nearest neighbors (KNN).
  • kernlab—menyediakan metode berbasis kernel untuk klasifikasi, regresi, dan algoritma klastering.
  • randomForest—untuk algoritma klasifikasi dan regresi random forest.
  • xgboost—untuk gradient boosting, regresi linear, dan algoritma pohon keputusan.
  • rpart—untuk pemartisian rekursif dalam pohon klasifikasi, regresi, dan survival.
  • glmnet—untuk metode regularisasi lasso dan elastic-net yang diterapkan pada algoritma regresi linear, regresi logistik, dan regresi multinomial.
  • nnet—untuk jaringan saraf dan algoritma log-linear multinomial.
  • tensorflow—antarmuka R ke TensorFlow, untuk jaringan saraf dalam dan komputasi numerik menggunakan grafik aliran data.
  • Keras—antarmuka R ke Keras, untuk jaringan saraf dalam.

35. Bagaimana memilih fitur untuk machine learning di R?

Mari pertimbangkan tiga pendekatan berbeda dan cara mengimplementasikannya di paket caret.

  1. Dengan mendeteksi dan menghapus fitur yang sangat berkorelasi dari dataset.

Kita perlu membuat matriks korelasi dari semua fitur lalu mengidentifikasi fitur yang sangat berkorelasi, biasanya yang memiliki koefisien korelasi lebih dari 0,75:

corr_matrix <- cor(features)
highly_correlated <- findCorrelation(corr_matrix, cutoff=0.75)
print(highly_correlated)
  1. Dengan memberi peringkat fitur data frame berdasarkan kepentingannya.

Kita perlu membuat skema pelatihan untuk mengendalikan parameter bagi train, menggunakannya untuk membangun model yang dipilih, lalu memperkirakan importance variabel untuk model tersebut:

control <- trainControl(method="repeatedcv", number=10, repeats=5)
model <- train(response_variable~., data=df, method="lvq", preProcess="scale", trControl=control)
importance <- varImp(model)
print(importance)
  1. Dengan secara otomatis memilih fitur optimal.

Salah satu metode paling populer yang disediakan caret untuk secara otomatis memilih fitur optimal adalah algoritma seleksi mundur yang disebut Recursive Feature Elimination (RFE).

Kita perlu menghitung kendali menggunakan metode resampling yang dipilih dan daftar fungsi yang telah ditentukan, menerapkan algoritma RFE dengan meneruskan fitur, variabel target, jumlah fitur yang dipertahankan, dan kendalinya, lalu mengekstrak prediktor yang terpilih:

control <- rfeControl(functions=caretFuncs, method="cv", number=10)
results <- rfe(features, target_variable, sizes=c(1:8), rfeControl=control)
print(predictors(results))

Jika Anda perlu memperkuat keterampilan machine learning di R, berikut sumber yang solid dan komprehensif: Machine Learning Scientist with R.

36. Apa itu korelasi dan kovarians, dan bagaimana menghitungnya di R?

Korelasi adalah ukuran kekuatan dan arah hubungan linear antara dua variabel. Nilainya berkisar dari -1 (korelasi negatif sempurna) hingga 1 (korelasi positif sempurna). Kovarians adalah ukuran sejauh mana dua variabel berubah relatif satu sama lain dan arah hubungan linear di antara keduanya. Berbeda dengan korelasi, kovarians tidak memiliki batas rentang.

Di R, untuk menghitung korelasi, kita menggunakan fungsi cor(), untuk menghitung kovarians—fungsi cov(). Sintaks kedua fungsi identik: kita meneruskan dua variabel (vektor) yang ingin dihitung ukurannya (mis., cor(vector_1, vector_2) atau cov(vector_1, vector_2)), atau seluruh data frame, jika ingin menghitung korelasi atau kovarians antar semua variabel dalam data frame tersebut (mis., cor(df) or cov(df)). Untuk dua vektor, hasilnya berupa satu nilai, untuk data frame, hasilnya berupa matriks korelasi (atau kovarians).

37. Sebutkan dan definisikan berbagai pendekatan untuk memperkirakan akurasi model di R.

Di bawah ini beberapa pendekatan dan cara mengimplementasikannya di paket caret R.

  • Pembagian data—seluruh dataset dibagi menjadi dataset pelatihan dan dataset uji. Yang pertama digunakan untuk menyesuaikan model, yang kedua untuk menguji performanya pada data yang belum terlihat. Pendekatan ini bekerja sangat baik pada data besar. Untuk mengimplementasikan pembagian data di R, kita perlu menggunakan fungsi createDataPartition() dan menetapkan parameter p ke proporsi data yang diperlukan untuk pelatihan.
  • Bootstrap resampling—mengekstrak sampel data acak dari dataset dan memperkirakan model pada sampel tersebut. Iterasi resampling seperti ini dijalankan berkali-kali dan dengan pengembalian. Untuk mengimplementasikan bootstrap resampling di R, kita perlu menetapkan parameter method dari fungsi trainControl() ke "boot" saat mendefinisikan pengendali pelatihan model.
  • Metode cross-validation
    • k-fold cross-validation —dataset dibagi menjadi k-subset. Model dilatih pada k-1 subset dan diuji pada subset yang tersisa. Proses yang sama diulang untuk semua subset, lalu akurasi model final diperkirakan.
    • Repeated k-fold cross-validation —prinsipnya sama dengan k-fold cross-validation, hanya saja dataset dibagi menjadi k-subset lebih dari satu kali. Untuk setiap pengulangan, akurasi model diperkirakan, kemudian akurasi akhir dihitung sebagai rata-rata akurasi di semua pengulangan.
    • Leave-one-out cross-validation (LOOCV) —satu observasi data disisihkan dan model dilatih pada semua observasi data lainnya. Proses yang sama diulang untuk semua observasi data.

Untuk mengimplementasikan metode cross-validation ini di R, kita perlu menetapkan parameter method dari fungsi trainControl() masing-masing ke "cv", "repeatedcv", atau "LOOCV" saat mendefinisikan pengendali pelatihan model.

38. Apa itu uji chi-kuadrat, dan bagaimana melakukannya di R?

Uji hipotesis statistik chi-kuadrat adalah teknik yang digunakan untuk menentukan apakah dua variabel kategorikal saling independen atau terdapat korelasi di antara keduanya. Untuk melakukan uji chi-kuadrat di R, kita perlu menggunakan fungsi chisq.test() dari paket stats. Langkah-langkahnya sebagai berikut:

1. Buat tabel kontingensi dengan variabel kategorikal yang diminati menggunakan fungsi table() dari base R:

table = table(df["var_1"], df["var_2"]) 

2. Teruskan tabel kontingensi ke fungsi chisq.test():

chisq.test(table) 

Anda dapat menyegarkan kembali pengetahuan tentang uji chi-kuadrat dan uji hipotesis lainnya di kursus Hypothesis Testing in R kami.

39. Apa itu Shiny di R?

Shiny adalah paket R sumber terbuka yang memungkinkan pembuatan aplikasi web dan halaman web interaktif sepenuhnya untuk data science dengan mudah dan cepat hanya menggunakan R, tanpa pengetahuan HTML, CSS, atau JavaScript. Shiny di R menawarkan banyak fitur dasar dan lanjutan, widget, tata letak, contoh aplikasi web, serta kode dasarnya untuk dikembangkan dan disesuaikan, serta pameran pengguna dari berbagai bidang (teknologi, olahraga, perbankan, pendidikan, dll.) yang dikumpulkan dan dikategorikan oleh komunitas pengembang aplikasi Shiny.

40. Apa perbedaan fungsi with() dan within()?

Fungsi with() mengevaluasi sebuah ekspresi R pada satu atau lebih variabel dari data frame dan mengeluarkan hasilnya tanpa memodifikasi data frame. Fungsi within() mengevaluasi sebuah ekspresi R pada satu atau lebih variabel dari data frame, memodifikasi data frame, dan mengeluarkan hasilnya. Di bawah ini kita dapat melihat bagaimana fungsi-fungsi ini bekerja menggunakan contoh data frame sampel:

df <- data.frame(a = c(1, 2, 3),  b = c(10, 20, 30))
print(df)

with(df, a * b)

print(within(df, c <- a * b))

Keluaran:

  a  b
1 1 10
2 2 20
3 3 30

10  40  90
  a  b  c
1 1 10 10
2 2 20 40
3 3 30 90

Saat menggunakan fungsi within(), untuk menyimpan modifikasi, kita perlu menetapkan keluaran fungsi ke sebuah variabel.

Penutup

Sebagai penutup, dalam artikel ini kita membahas 40 pertanyaan wawancara pemrograman R yang paling umum dan jawaban yang diharapkan untuk masing-masing. Semoga, dengan informasi ini, Anda merasa lebih percaya diri dan siap untuk wawancara R yang sukses, baik Anda sedang mencari pekerjaan di bidang R maupun kandidat yang tepat untuk posisi terbuka di perusahaan Anda.

Untuk mendapatkan pengalaman langsung menjawab pertanyaan, lihat kursus kami Latihan Pertanyaan Wawancara Statistik di R.


Elena Kosourova's photo
Author
Elena Kosourova
LinkedIn

IBM Certified Data Scientist (2020), sebelumnya Ahli Geologi/Geomodeler Perminyakan untuk ladang minyak dan gas di seluruh dunia dengan pengalaman kerja internasional lebih dari 12 tahun. Mahir dalam Python, R, dan SQL. Bidang keahlian: pembersihan data, manipulasi data, visualisasi data, analisis data, pemodelan data, statistik, storytelling, machine learning. Berpengalaman luas dalam mengelola komunitas data science serta menulis/meninjau artikel dan tutorial tentang data science dan topik karier.

Topik
R
Layanan Karier

Mulai Perjalanan R Anda Hari Ini!

Program

Pengembang R

52 jam
Dapatkan keterampilan yang diperlukan untuk membangun karier Anda sebagai R Developer dengan belajar menulis dan mengemas kode secara efisien. Tidak diperlukan pengalaman coding!
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

Lihat SelengkapnyaLihat Selengkapnya