Emacs Speaks Statistics (R ile) öğrenmek için bazı iyi referanslar / tavsiyeler nelerdir?


9

R'yi birkaç yıldır kullanıyorum, ancak her zaman Tinn-R, JGR ve en son R-Studio gibi bir GUI kullandım.

R-Studio'nun arayüzünü sevmeme rağmen, çok az grafik içeren / hiç grafik içermeyen daha uzun programlar için Emacs gibi daha temel bir metin editörü tarafından sunulan kısayollardan yararlanarak daha verimli kod yazabileceğimi hissediyorum.

Emacs ve ESS eklentisini kurdum, her şey düzgün çalışıyor ve bazı kodları test ettim, ancak buna alışmakta zorlanıyorum ve uygun bir referans kılavuzu bulamadım.

Google aramaları, öncelikle eklentileri yüklemeye ve yapılandırmaya odaklanan eğiticilere sahip birkaç çok tarihli web sitesi döndürür ve resmi web sitesindeki kılavuz benim için biraz fazla yoğun.

R'ye aşina olan ama Emacs için olmayan biri için tasarlanmış nispeten kısa bir tanıtım (ideal olarak ekran görüntüsü ve kısayol tuşlarının bir listesi ile) arıyorum.

Başlamakla ilgili tüm referanslar veya diğer ipuçları çok takdir edilecektir.

Yanıtlar:


11

Öncelikle emacs ile çalışan temel metinleri öğrenmeniz gerekir. Emacs çok karmaşık olduğundan, metni ve kopyayı nasıl seçeceğinizi öğrenmek zor olabilir. Bu yüzden bunu nasıl verimli bir şekilde yapacağınızı öğrenmek için biraz zaman ayırın. Kılavuzu okumak yardımcı olabilir. Mac OS X için Aquamacs kullanın, yerel kısayolları destekler.

ESS ile çalışmak R ile çalışmaktan farklı değildir. Kod düzenleme için aynı kurallar geçerli olmalıdır. Benim durumumda, her projenin ana dizinimdeki R adlı üst dizinde bulunan kendi dizini vardır (Windows için, emacs home dizinini tüm kaynağınızın bulunduğu dizine yönlendirmenizi öneririm). Yani proje üzerinde çalışmak için ESS kullandığımda her zaman M-x Rproje dizinimi başlangıç ​​dizinini seçerim.

R işlemine başladıktan sonra, genellikle emacları iki pencereye bölerim (emacs terminolojisi). Sonra solda, sağdaki R işlemine gönderdiğim bir kaynak kodum var. İlgili kısayollar (emacs kısayollarıdır) C-x 3pencereleri dikey olarak bölmek C-x 1, geçerli arabelleği tek pencere yapmak ve C-x 2pencereleri yatay olarak bölmek içindir.

R'ye kod gönderirken, işlevler ve R deyimleri arasında ayrım yapıyorum. Bunu tüm işlevlerimi genellikle bir dosyada tutarak yaparım 10code.R. Sonra ESS dosyası yükle seçeneğini (kısayol C-c C-l) kullanarak bu dosyayı yükleyebilirim . Bu yaklaşımın avantajı, tüm işlevleri kaynaklaması ve R tamponunda hiçbir şey üretmemesidir. Kodunuzda bir hata varsa, ESS minibuffer'da bir mesaj gösterir ve bunu C-c`` tuşuna basarak araştırabilirsiniz .

Diğer kod, açıklayıcı tutmaya çalıştığım R ifadeleridir: verileri yükle, verileri temizle, istatistiksel modele uy, sonuçları denetle, nihai sonuçları üret. Bu ifadelerin kaynak kodu, projenin geçerli durumudur. Niyet, proje bittikten sonra, bu kod ile dosyaları kaynak, projeyi yeniden üretir (ayrıca izleme geçmişi için git kullanıyorum). Bu dosya ile çalışırken, ben sadece eval fonksiyonu, paragraf, hangi kısayol olan deyim komutu ile R sürecine göndermek bir R deyimi ile çalışır C-c C-c. Bu komut R işlemine paragrafı, yani yeni satırlarla ayrılmış metni gönderir. Bu, R ifadelerini görevler halinde gruplayabildiğiniz ve tüm görevi R işlemine gönderebileceğiniz için kullanışlıdır. Ayrıca çok uygun olan metinlerin seçilmesini gerektirmez. KısayolC-c C-c imleci R penceresine hareket ettirme avantajına sahiptir, böylece gönderilen R ifadesinin sonuçlarını hemen inceleyebilirsiniz.

Yani benim temel iş akışım pencereler ve arabellekler arasında çok hareket ediyor. Bunu kolaylaştırmak için .emacs dosyamda aşağıdaki kısayolları kullanıyorum:

(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)

Nadiren kullanıyorum f1, ama diğerleri çok sık. Kullandığım diğer belirli ESS ayarları şunlardır:

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

Bu, ESS'ye sekmenin 4 karakterini genişletmesini (varsayılan 2'dir), ki bu benim kişisel tercihimdir ve ESS'nin geçmiş olarak kaydettiği komutlarınızın sayısını artırır.

Doğrudan R işlemiyle çalışmak için aşağıdaki kısayolları çok kullanışlı buldum:

(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)
        )
)

Bu, R deyimi geçmişinizdeki R deyimini çağırır, ancak bunu zaten satırınızda olan deyimle eşleştirmeye çalışır. Örneğin pl, R sürecine yazmak ve \C-up(bu kontrol ve yukarı ok) tuşuna basmak , ile başlayan tüm ifadeler arasında dolaşacaktır pl, bu nedenle örneğin tüm plot(...komutları hatırlayacaktır .

ESS ile kullandığım son ayar şöyledir:

(setq ess-ask-about-transfile t)

Bu şekilde ESS, R işlemiyle her zaman arabellekteki metni nereye kaydedeceğini sorar. Genellikle bu dosyaları tarihe göre numaralandırırım, bu yüzden her zaman tam olarak ne yaptığımı takip etmek için başka bir yolum var. Bu seçeneğin tek uyarısı, bir nedenden ötürü ESS'nin R tamponunu R'yi yükledikten sonra salt okunur olarak ayarlamasıdır C-x C-q. Tamponu yazılabilir hale getirmenin kısayolu şudur .

Bunlar benim ESS ile çalışmak için kullandığım ayarlarım, onlarla mutlu hissediyorum ve birkaç yıl boyunca hiçbir şey eklemeye gerek duymadım. ESS'yi ilk kez kullananlara tanıtırken genellikle bu genel bakışı veririm.

Emacs ile çalışırken benim için en çok kullanılan kısayol ve özellikle C-gmini tampondaki komutu bırakan son kısayol ile bitireceğim . Emacs ve ESS ile çalıştığım tüm yıllar boyunca, hala istemediğim bazı Emacs komutunu çağırmayı başardım C-g, bu durumlarda çok yardımcı olur.


Teşekkür ederim! Bu bilgi çok yardımcı, Emacs kurulumumu benzer bir şekilde yapılandırmaya çalışacağım. İşletim sistemine özgü noktalara gelince, Linux'tayım (Fedora 15), bu yüzden bunun yapılandırma / düzende herhangi bir fark yaratıp yaratmadığından emin değilim.
Will

Fedora ile sade emacs almalısınız. Çok eski olduğu için ESS'yi Fedora tarafından sağlanan sürümü kullanmak yerine elle yüklemenizi tavsiye ederim. Temel olarak önce metnin nasıl işlendiğine ve hangi anahtarın meta olduğuna bakın. M-w C-y C-wKopya, yapıştırma, kesme gibi çalışacağından şüpheleniyorum .
mpiktas

2

Bulunduğunuz yere bağlı olarak, bu sizin için işe yaramayabilir, ancak koridorda onu kullanan ve sorularla rahatsız eden birini buldum. Onunla sopa, buna değer!

Özellikle yararlı bulduğum bir ipucu cua-mode kullanmaktı; emacs'ın en yaygın klavye kısayollarından bazılarını (kaydet, kes, kopyala, vb.) modern programlarla paylaşmasını sağlar. Ayrıca cua modunda dikdörtgen modunun kullanımını çok daha kolay buldum.


2
Bahşiş için teşekkürler, CUA modunu etkinleştirdim. Diğer ipucu ile ilgili olarak, ESS öğrenmeye yönelik orijinal motivasyonlarımdan biri, bir profesörümden birinin bir ders sırasında kodu ne kadar hızlı düzenleyebileceğini izliyordu. Yaz için kampüsten uzaktayım, ama döndüğümde bir "akıl hocası" bulmaya çalışacağım.
Will
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.