Pertanyaan Bisakah Anda membuat R mencetak lebih banyak pesan kesalahan?


Saya sering frustrasi dengan pesan-pesan kesalahan cryptic R. Saya tidak berbicara tentang selama sesi interaktif, maksud saya ketika Anda menjalankan skrip. Pesan kesalahan tidak mencetak nomor baris, dan seringkali sulit untuk melacak garis yang menyinggung, dan alasan kesalahan (bahkan jika Anda dapat menemukan lokasi).

Baru-baru ini naskah R saya gagal dengan pesan yang sangat mendalam: "Eksekusi dihentikan." Cara saya biasanya melacak kesalahan seperti itu adalah dengan meletakkan banyak pernyataan cetak di seluruh skrip - tetapi ini adalah rasa sakit. Saya kadang-kadang harus melalui naskah baris demi baris dalam sesi interaktif untuk menemukan kesalahan.

Apakah ada yang memiliki solusi yang lebih baik untuk bagaimana membuat output kesalahan R lebih informatif?

EDIT: Banyak hal R-debugging berfungsi untuk sesi interaktif. Saya mencari bantuan pada skrip baris perintah yang dijalankan melalui Rscript. Saya tidak berada di tengah-tengah sesi R ketika kesalahan terjadi, saya berada di shell bash. Saya tidak dapat menjalankan "traceback ()"


32
2017-09-20 12:56


asal


Jawaban:


Cobalah beberapa saran dalam posting ini:

Saran umum untuk debugging di R

Secara khusus, findLineNum() dan traceback()/setBreakpoint().


8
2017-09-20 13:05



@Nathan Well tambahkan baris ini sink(stdout(), type="message") di awal skrip dan Anda harus masuk ke pesan konsol baik konten skrip dan output bersama dengan pesan kesalahan sehingga Anda dapat melihatnya seperti dalam mode interaktif di konsol. (Anda juga dapat mengalihkan ke file log jika Anda lebih suka menjaga konsol "bersih")


1
2017-09-20 19:24



Silahkan lihat saya paket tryCatchLog (https://github.com/aryoda/tryCatchLog).

Meskipun tidak mungkin untuk memperbaiki pesan kesalahan R secara langsung, Anda dapat menghemat banyak waktu dengan mengidentifikasi baris kode yang tepat dari kesalahan dan memiliki variabel aktual pada saat kesalahan disimpan dalam dump untuk analisis "post mortem"!

Keuntungan utama dari tryCatchLog berfungsi berulang tryCatch adalah

  • penebangan mudah kesalahan, peringatan, dan pesan ke dalam file atau konsol
  • peringatan tidak menghentikan eksekusi program (tryCatch menghentikan eksekusi jika Anda meneruskan fungsi handler peringatan)
  • mengidentifikasi sumber kesalahan dan peringatan dengan melakukan pencatatan a setumpuk jejak dengan referensi ke nama file sumber dan nomor baris (karena traceback tidak mengandung jejak stack penuh)
  • memungkinkan analisis post-mortem setelah kesalahan dengan membuat file dump dengan semua variabel lingkungan global (ruang kerja) dan setiap fungsi yang disebut (via dump.frames) - sangat membantu untuk tugas batch yang tidak dapat Anda debug pada server secara langsung untuk mereproduksi kesalahan!

0
2018-02-18 22:51



Satu cara di dalam skrip untuk mendapatkan info lebih lanjut tentang tempat terjadinya kesalahan adalah dengan mengalihkan pesan R ke aliran yang sama dengan kesalahan:

sink(stdout(), type="message") 

Dengan cara ini Anda mendapatkan pesan dan kesalahan dalam output yang sama sehingga Anda melihat baris mana yang menyebabkan kesalahan ...


-1
2017-09-20 15:53