Apa sajakah referensi / saran yang bagus untuk belajar Emacs Speaks Statistics (with R)?

9

Saya telah menggunakan R selama beberapa tahun, tetapi saya selalu menggunakan GUI seperti Tinn-R, JGR, dan yang terbaru R-Studio.

Walaupun saya menyukai antarmuka R-Studio, saya merasa bahwa untuk program yang lebih panjang dengan sedikit / tanpa grafik, saya dapat membuat kode lebih efisien dengan memanfaatkan cara pintas yang ditawarkan oleh editor teks yang lebih mendasar seperti Emacs.

Saya menginstal Emacs dan plugin ESS, semuanya berfungsi dengan baik dan saya telah menguji beberapa kode, tetapi saya mengalami kesulitan membiasakan diri dan saya belum menemukan manual referensi yang sesuai.

Pencarian Google menghasilkan beberapa situs web yang sangat ketinggalan jaman dengan tutorial yang berfokus terutama pada pemasangan dan konfigurasi plugin dan manual pada situs web resmi agak terlalu padat bagi saya.

Saya mencari pengantar yang relatif singkat, (idealnya dengan tangkapan layar dan daftar hotkey) yang dirancang untuk seseorang yang terbiasa dengan R, tetapi tidak untuk Emacs.

Referensi atau tips lain untuk memulai akan sangat dihargai.

Akan
sumber

Jawaban:

11

Pertama, Anda perlu mempelajari operasi teks dasar dengan emacs. Karena emacs sangat canggih mencari tahu bagaimana memilih teks dan menyalin mungkin menjadi tantangan. Jadi investasikan waktu untuk mencari tahu cara melakukannya secara efisien. Membaca manual mungkin bisa membantu. Untuk Mac OS X menggunakan Aquamacs, ia mendukung pintasan asli.

Bekerja dengan ESS tidak berbeda dengan bekerja dengan R. Aturan yang sama untuk mengatur kode harus berlaku. Dalam kasus saya, setiap proyek memiliki direktori sendiri, yang berada di direktori induk yang disebut R, yang ada di direktori home saya (Untuk Windows, saya sarankan untuk mengarahkan direktori home emacs ke direktori tempat semua sumber Anda berada). Jadi ketika saya menggunakan ESS untuk mengerjakan proyek saya selalu melakukan M-x Rdan memilih direktori awal direktori proyek saya.

Setelah memulai proses R, saya biasanya membagi emacs dalam dua jendela (terminologi emacs). Kemudian di sebelah kiri saya memiliki kode sumber, yang saya kirim ke proses R di sebelah kanan. Pintasan yang relevan (ini adalah pintasan emacs) adalah C-x 3untuk membelah jendela secara vertikal, C-x 1untuk menjadikan buffer saat ini satu-satunya jendela dan C-x 2untuk membelah jendela secara horizontal.

Saat mengirim kode ke R, saya menjaga perbedaan antara fungsi dan pernyataan R. Saya melakukan ini dengan menjaga semua fungsi saya dalam satu file yang biasa disebut 10code.R. Maka saya cukup memuat file ini menggunakan opsi memuat file ESS (pintasan C-c C-l). Keuntungan dari pendekatan ini adalah bahwa ia sumber semua fungsi dan tidak menghasilkan apa pun di buffer R. Jika ada kesalahan dalam kode Anda maka ESS menampilkan pesan di minibuffer dan Anda dapat menyelidikinya dengan menekan C-c`.

Kode lainnya adalah pernyataan R, yang saya coba jaga agar tetap jelas: memuat data, membersihkan data, mencocokkan model statistik, memeriksa hasil, menghasilkan hasil akhir. Kode sumber untuk pernyataan ini adalah status proyek saat ini. Maksudnya adalah setelah proyek selesai, sumber file dengan kode ini, mereproduksi proyek (Saya juga menggunakan git untuk melacak riwayat). Ketika bekerja dengan file ini, saya biasanya hanya bekerja dengan satu pernyataan R, yang saya kirim ke proses R melalui fungsi eval, paragraf, perintah pernyataan yang pintasannya C-c C-c. Perintah ini mengirim ke R untuk memproses paragraf, yaitu teks yang dibatasi oleh baris baru. Ini berguna, karena Anda dapat mengelompokkan pernyataan R ke dalam tugas, dan mengirim seluruh tugas ke proses R. Itu juga tidak memerlukan memilih teks, yang juga sangat nyaman. Jalan pintasC-c C-c memiliki keuntungan karena memindahkan kursor ke jendela R, sehingga Anda segera dapat memeriksa hasil pernyataan R. yang dikirim.

Jadi alur kerja dasar saya banyak bergerak antara windows dan buffer. Untuk memfasilitasi ini saya menggunakan cara pintas berikut dalam file .emacs saya:

(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)

Saya jarang menggunakan f1, tetapi yang lainnya sangat sering. Pengaturan ESS spesifik lainnya yang saya gunakan adalah sebagai berikut:

(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)

Ini memberitahu ESS untuk membuat tab 4 karakter lebarnya (defaultnya adalah 2), yang merupakan preferensi pribadi saya, dan memperluas jumlah perintah yang dikeluarkan ESS yang disimpan sebagai riwayat.

Untuk bekerja dengan proses R secara langsung, saya menemukan pintasan berikut sangat berguna:

(add-hook 'inferior-ess-mode-hook 
      '(lambda nil 
         (define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
             (define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
        (define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
        )
)

Ini mengingat kembali pernyataan R dari riwayat pernyataan R Anda, tetapi mencoba mencocokkannya dengan yang sudah ada di baris Anda. Jadi misalnya mengetik pldalam proses R dan menekan \C-up(itu kontrol dan panah atas) akan menggilir semua pernyataan yang dimulai dengan pl, jadi akan memanggil kembali misalnya semua plot(...perintah.

Pengaturan terakhir yang saya gunakan dengan ESS adalah sebagai berikut:

(setq ess-ask-about-transfile t)

Dengan cara ini ESS selalu bertanya di mana harus menyimpan teks dalam buffer dengan proses R. Saya biasanya memberi nomor file-file ini menurut tanggal, jadi saya selalu punya cara lain untuk melacak apa yang sebenarnya saya lakukan. Satu-satunya peringatan dari opsi ini adalah bahwa untuk beberapa alasan ESS menetapkan buffer R hanya untuk dibaca, setelah memuat R. Shortcut untuk membuat buffer dapat ditulis adalah C-x C-q.

Jadi ini adalah pengaturan saya yang saya gunakan untuk bekerja dengan ESS, saya merasa senang dengan mereka dan saya tidak merasa perlu menambahkan apa pun selama beberapa tahun. Saat memperkenalkan ESS kepada pengguna pertama kali, saya biasanya memberikan tinjauan umum ini.

Saya akan mengakhiri dengan jalan pintas terakhir yang bagi saya adalah jalan pintas yang paling sering digunakan ketika bekerja dengan Emacs dan dengan ESS khususnya C-gyang keluar dari perintah di mini-buffer. Selama bertahun-tahun saya bekerja dengan Emacs dan ESS saya masih berhasil memanggil beberapa perintah Emacs yang tidak saya inginkan, C-gsangat membantu dalam situasi ini.

mpiktas
sumber
Terima kasih! Informasi ini sangat membantu, saya akan mencoba mengkonfigurasi pengaturan Emacs saya dengan cara yang sama. Mengenai poin sistem operasi tertentu, saya di Linux (Fedora 15), jadi saya tidak yakin apakah itu membuat perbedaan dalam konfigurasi / tata letak.
Will
Dengan Fedora Anda harus mendapatkan emacs biasa. Saya akan merekomendasikan untuk menginstal ESS dengan tangan daripada menggunakan versi yang disediakan Fedora, karena itu mungkin terlalu tua. Jadi pada dasarnya pertama-tama periksa bagaimana teks dimanipulasi dan kunci mana yang merupakan meta. Saya curiga M-w C-y C-wakan berfungsi sebagai salin, tempel, potong.
mpiktas
2

Tergantung di mana Anda berada, ini mungkin tidak berhasil untuk Anda, tetapi saya menemukan seseorang di lorong yang menggunakannya dan mengganggu mereka dengan pertanyaan. Tetap dengan itu, itu layak!

Satu tip yang saya temukan sangat berguna adalah menggunakan cua-mode; itu membuat emacs berbagi beberapa cara pintas keyboard yang paling umum (seperti save, cut, copy, dll) dengan program modern. Saya juga menemukan mode persegi panjang lebih mudah digunakan dalam mode-cua.

Aaron meninggalkan Stack Overflow
sumber
2
Terima kasih atas tipnya, saya mengaktifkan mode CUA. Mengenai tip lainnya, salah satu motivasi asli saya untuk belajar ESS adalah menyaksikan seberapa cepat salah satu profesor saya dapat mengedit kode selama kuliah. Saya jauh dari kampus untuk musim panas, tetapi saya akan mencoba mencari "mentor" ketika saya kembali.
Will