Fitur aplikasi R perusahaan yang tangguh

Mereka yang bekerja dengan R sangat menyadari bahwa bahasa tersebut awalnya dirancang sebagai alat untuk pekerjaan interaktif. Tentu saja, metode yang nyaman untuk aplikasi langkah-demi-langkah berbasis konsol oleh orang yang jauh dalam subjek ternyata tidak cocok untuk membuat aplikasi untuk pengguna akhir. Kemampuan untuk mendapatkan diagnostik terperinci segera berdasarkan fakta kesalahan, untuk melihat melalui semua variabel dan jejak, untuk secara manual mengeksekusi elemen kode (mungkin sebagian mengubah variabel) - semua ini tidak akan tersedia ketika aplikasi R sedang offline di lingkungan perusahaan. (kami katakan R, maksud kami aplikasi web pada dasarnya Mengkilap).


Namun, tidak semuanya buruk. Lingkungan R (paket dan pendekatan) telah berevolusi sedemikian rupa sehingga sejumlah trik yang sangat sederhana dapat dengan elegan memecahkan masalah memastikan stabilitas dan keandalan aplikasi pengguna. Beberapa dari mereka akan dijelaskan di bawah ini.


Ini adalah kelanjutan dari publikasi sebelumnya .


Apa kesulitan dari tugas itu?


Rentang tugas utama yang sering digunakan R adalah pemrosesan data yang beragam. Dan bahkan algoritma yang sepenuhnya debugged, diletakkan di semua sisi dengan tes dan didokumentasikan sepenuhnya, dapat dengan mudah memecah dan memberikan apa-apa jika mendapat data bengkok pada inputnya.


Data dapat dimasukkan dari sistem informasi lain maupun dari pengguna. Dan, jika dalam kasus pertama dimungkinkan untuk menuntut kepatuhan terhadap API dan menerapkan pembatasan yang sangat ketat pada stabilitas arus informasi, maka dalam kasus kedua tidak ada jalan keluar dari kejutan. Seseorang dapat membuat kesalahan dan menyelipkan file yang salah, menulisnya salah. 99% pengguna menggunakan Excel dalam pekerjaan mereka dan lebih suka membuka sistem dengan itu, banyak halaman, dengan format licik. Dalam hal ini, tugas menjadi lebih rumit. Bahkan dokumen yang secara visual valid dapat terlihat sangat tidak masuk akal dari sudut pandang mesin. Tanggal-tanggal tersebar (kisah yang sangat terkenal "perancang Excel mengira 1900 adalah tahun kabisat, tapi ternyata tidak" ). Nilai numerik disimpan sebagai teks dan set huruf. Sel tak terlihat dan formula tersembunyi ... Dan banyak lagi. Pada prinsipnya, tidak mungkin untuk meramalkan semua kemungkinan garu - tidak ada imajinasi yang cukup. Apa artinya hanya menggandakan catatan di berbagai gabungan dengan sumber melengkung.


Sebagai pertimbangan tambahan, kami akan mengambil yang berikut:


  1. Dokumen yang sangat bagus "Pengantar pembersihan data dengan R" menjelaskan proses persiapan data awal. Untuk langkah lebih lanjut, kami memilih kehadiran dua fase validasi: teknis dan logis.


    • Validasi teknis adalah untuk memverifikasi kebenaran sumber data. Struktur, jenis, indikator kuantitatif.
    • Validasi logis dapat multi-tahap, dilakukan dalam proses perhitungan, dan terdiri dalam memeriksa kesesuaian elemen data tertentu atau kombinasinya dengan berbagai persyaratan logis.

  2. Salah satu aturan dasar dalam pengembangan antarmuka pengguna adalah pembentukan diagnostik paling lengkap jika terjadi kesalahan pengguna. Artinya, jika pengguna telah mengunggah file, maka perlu untuk memeriksa kebenarannya sebanyak mungkin dan memberikan ringkasan lengkap dengan semua kesalahan (juga disarankan untuk menjelaskan apa yang salah), dan tidak menabrak masalah pertama dengan pesan seperti β€œInput salah value @ line 528493, pos 17 "dan perlu mengunduh file baru dengan kesalahan ini diperbaiki. Pendekatan ini memungkinkan Anda untuk mengurangi jumlah iterasi secara signifikan untuk membentuk sumber yang benar dan meningkatkan kualitas hasil akhir.

Teknologi dan metode validasi


Mari kita mulai dari akhir. Ada sejumlah paket untuk validasi logis. Dalam praktik kami, kami menentukan pendekatan berikut.


  1. Sudah dplyr klasik. Dalam kasus sederhana, akan lebih mudah untuk menggambar pipa dengan serangkaian pemeriksaan dan analisis hasil akhir.
  2. Paket validate untuk memeriksa objek yang benar secara teknis untuk kepatuhan dengan aturan yang diberikan.

Untuk validasi teknis, kami fokus pada pendekatan berikut:


  1. Paket checkmate dengan berbagai fungsi cepat untuk melakukan berbagai pemeriksaan teknis.
  2. Pekerjaan eksplisit dengan pengecualian "Advanced R. Debugging, penanganan kondisi, dan pemrograman defensif" , "Advanced R. Beyond Exception Handling: Conditions and Restart" keduanya untuk melakukan jumlah validasi penuh dalam satu langkah, dan untuk memastikan stabilitas aplikasi.
  3. Gunakan pembungkus purr untuk pengecualian. Sangat berguna saat digunakan di dalam pipa.

Dalam kode yang dipecah menjadi fungsi, elemen penting dari pemrograman defensif adalah memeriksa parameter input dan output fungsi. Dalam hal bahasa dengan pengetikan dinamis, pemeriksaan jenis harus dilakukan secara independen. Untuk tipe dasar, paket skakmat ideal, terutama fungsi qtest \ qassert . Untuk memeriksa data.frame berhenti di tentang konstruksi berikut (memeriksa nama dan tipe). Trik dengan menggabungkan nama dan tipe mengurangi jumlah garis dalam cek.


 ff <- function(dataframe1, dataframe2){ #        calledFun <- deparse(as.list(sys.call())[[1]]) tic("Calculating XYZ") #       (class,   typeof,  Date ) list(dataframe1=c("name :: character", "val :: numeric", "ship_date :: Date"), dataframe2=c("out :: character", "label :: character")) %>% purrr::iwalk(~{ flog.info(glue::glue("Function {calledFun}: checking '{.y}' parameter with expected structure '{collapse(.x, sep=', ')}'")) rlang::eval_bare(rlang::sym(.y)) %>% assertDataFrame(min.rows=1, min.cols=length(.x)) %>% {assertSetEqual(.x, stri_join(names(.), map_chr(., class), sep=" :: "), .var.name=.y)} # {assertSubset(.x, stri_join(names(.), map_chr(., typeof), sep=" :: "))} }) … } 

Dalam fungsi pengecekan jenis, Anda dapat memilih metode sesuai selera Anda, sesuai dengan data yang diharapkan. class dipilih karena merekalah yang memberikan tanggal sebagai Date , dan bukan sebagai angka (representasi internal). Masalah penentuan tipe data dibahas dengan sangat terperinci dalam dialog β€œSurvei komprehensif tentang berbagai hal dalam mode R. 'dan' kelas 'dan' tipe 'tidak cukup . "


assertSetEqual atau assertSubset dipilih untuk alasan kolom pencocokan yang jelas atau cukup minimum.


Untuk tugas-tugas praktis, set kecil seperti itu benar-benar mencakup sebagian besar kebutuhan.


Posting sebelumnya - R sebagai pelampung bagi administrator sistem .

Source: https://habr.com/ru/post/id413865/


All Articles