Jakie są dobre referencje / porady dotyczące nauki Emacsa mówi statystyki (z R)?

9

Używam R od kilku lat, ale zawsze korzystałem z GUI, takich jak Tinn-R, JGR, a ostatnio R-Studio.

Chociaż podoba mi się interfejs R-Studio, wydaje mi się, że w przypadku dłuższych programów z niewielką liczbą grafik / bez grafiki, mógłbym wydajniej kodować, korzystając ze skrótów oferowanych przez bardziej podstawowy edytor tekstu, taki jak Emacs.

Zainstalowałem Emacsa i wtyczkę ESS, wszystko działa poprawnie i przetestowałem trochę kodu, ale trudno mi się przyzwyczaić i nie znalazłem odpowiedniego podręcznika.

Wyszukiwania Google zwracają kilka bardzo przestarzałych stron internetowych z samouczkami, które koncentrują się przede wszystkim na instalowaniu i konfigurowaniu wtyczek, a instrukcja na oficjalnej stronie jest dla mnie zbyt gęsta.

Szukam stosunkowo krótkiego wprowadzenia (najlepiej ze zrzutem ekranu i listy skrótów) zaprojektowanego dla kogoś, kto zna R, ale nie Emacsa.

Będziemy wdzięczni za wszelkie odniesienia lub inne wskazówki dotyczące rozpoczęcia pracy.

Będzie
źródło

Odpowiedzi:

11

Najpierw musisz nauczyć się podstawowego tekstu posługującego się emacsem. Ponieważ emacs jest bardzo wyrafinowany, znalezienie prostego wyboru tekstu i kopiowania może być wyzwaniem. Dlatego poświęć trochę czasu, aby dowiedzieć się, jak to zrobić skutecznie. Przeczytanie instrukcji może pomóc. W systemie Mac OS X używa Aquamacs, obsługuje natywne skróty.

Praca z ESS nie różni się od pracy z R. Te same zasady dotyczące organizacji kodu powinny mieć zastosowanie. W moim przypadku każdy projekt ma swój własny katalog, który znajduje się w katalogu nadrzędnym o nazwie R, który znajduje się w moim katalogu domowym (w systemie Windows zalecam skierowanie katalogu domowego emacs do katalogu, w którym znajduje się całe źródło). Tak więc, kiedy używam ESS do pracy nad projektem, zawsze robię M-x Ri wybieram katalog początkowy mojego katalogu projektu.

Po uruchomieniu procesu R zwykle dzielę emacsa na dwa okna (terminologia emacs). Następnie po lewej mam kod źródłowy, który wysyłam do procesu R po prawej. Odpowiednie skróty (są to skróty emacsa) służą C-x 3do podziału okien w pionie, C-x 1do uczynienia bieżącego bufora jedynym oknem i C-x 2do podziału okien w poziomie.

Wysyłając kod do R, zachowuję rozróżnienie między funkcjami a instrukcjami R. Robię to, przechowując wszystkie moje funkcje w jednym pliku, zwykle nazywanym 10code.R. Następnie mogę po prostu załadować ten plik za pomocą opcji ładowania pliku ESS (skrót C-c C-l). Zaletą tego podejścia jest to, że źródło wszystkich funkcji i nie produkuje nic w buforze R. Jeśli w kodzie wystąpił błąd, ESS wyświetla komunikat w minibuforze i można go zbadać, naciskając C-c`.

Drugi kod to instrukcje R, które staram się zachować w sposób oczywisty: ładuj dane, czyść dane, dopasowuj model statystyczny, sprawdzaj wyniki, twórz ostateczne wyniki. Kodem źródłowym tych instrukcji jest bieżący status projektu. Intencją jest, aby po zakończeniu projektu, pobieranie plików z tym kodem, reprodukowało projekt (używam również git do śledzenia historii). Podczas pracy z tym plikiem zwykle pracuję tylko z jedną instrukcją R, którą wysyłam do procesu R za pomocą funkcji eval, akapit, polecenie instrukcji, którym jest skrót C-c C-c. To polecenie wysyła do R przetworzenie akapitu, tzn. Tekstu, który jest oddzielony nowymi wierszami. Jest to przydatne, ponieważ można grupować instrukcje R w zadania i wysyłać całe zadanie do procesu R. Nie wymaga również zaznaczania tekstu, co jest również bardzo wygodne. SkrótC-c C-c ma tę zaletę, że przesuwa kursor do okna R, dzięki czemu można natychmiast sprawdzić wyniki wysłanej instrukcji R.

Więc mój podstawowy przepływ pracy dużo się przemieszcza między oknami i buforami. Aby to ułatwić, w pliku .emacs używam następujących skrótów:

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

Rzadko używam f1, ale wszystkie pozostałe bardzo często. Inne specyficzne ustawienia ESS, których używam, to:

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

Mówi to ESS, aby tabulator miał szerokość 4 znaków (domyślnie jest to 2), co jest moją osobistą preferencją, i zwiększa liczbę wydanych poleceń zapisywanych przez ESS jako historię.

Do bezpośredniej pracy z procesem R bardzo przydatne okazały się następujące skróty:

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

To przywołuje instrukcję R z historii instrukcji R, ale próbuje dopasować ją do tej, która jest już w twojej linii. Na przykład wpisanie plw procesie R i naciśnięcie \C-up(to kontrola i strzałka w górę) spowoduje przejście przez wszystkie instrukcje, które zaczynają się od pl, więc przywołają na przykład wszystkie plot(...polecenia.

Ostateczne ustawienie, którego używam z ESS, jest następujące:

(setq ess-ask-about-transfile t)

W ten sposób ESS zawsze pyta, gdzie zapisać tekst w buforze z procesem R. Zazwyczaj numeruję te pliki według daty, więc zawsze mam inny sposób na śledzenie tego, co dokładnie robiłem. Jedynym zastrzeżeniem tej opcji jest to, że z jakiegoś powodu ESS ustawia bufor R tylko do odczytu, po załadowaniu R. Skrót do zapisywania bufora do zapisu to C-x C-q.

To są moje ustawienia, których używam do pracy z ESS, czuję się z nimi zadowolony i nie odczuwałem potrzeby dodawania niczego od kilku lat. Przedstawiając ESS użytkownikom po raz pierwszy, zazwyczaj przedstawiam ten przegląd.

Zakończę ostatnim skrótem, który jest dla mnie najczęściej używanym skrótem podczas pracy z Emacsem, aw szczególności z ESS, C-gktóry zamyka polecenie w mini-buforze. Przez wszystkie lata pracy z Emacsem i ESS wciąż udawało mi się wywołać polecenie Emacsa, którego nie chciałem, C-gjest bardzo pomocne w takich sytuacjach.

mpiktas
źródło
Dziękuję Ci! Te informacje są bardzo pomocne, spróbuję skonfigurować moją konfigurację Emacsa w podobny sposób. Jeśli chodzi o punkty specyficzne dla systemu operacyjnego, jestem na Linuksie (Fedora 15), więc nie jestem pewien, czy to wpływa na konfigurację / układ.
Czy
Z Fedorą powinieneś dostać zwykły emacs. Zalecam ręczne instalowanie ESS zamiast korzystania z wersji dostarczonej z Fedorą, ponieważ może to być za stara. Zasadniczo najpierw sprawdź, jak manipulowany jest tekst i który klucz to meta. Podejrzewam, że M-w C-y C-wbędzie działać jako kopiowanie, wklejanie, wycinanie.
mpiktas
2

W zależności od tego, gdzie jesteś, może ci się to nie przydać, ale na korytarzu znalazłem kogoś, kto go używał i zadawał im pytania. Trzymaj się tego, warto!

Jedną z porad, które uznałem za szczególnie przydatne, było użycie trybu cua; sprawia, że ​​emacs udostępnia niektóre z najbardziej popularnych skrótów klawiaturowych (takich jak zapisywanie, wycinanie, kopiowanie itp.) z nowoczesnymi programami. Odkryłem również, że tryb prostokąta jest o wiele łatwiejszy w użyciu w trybie cua.

Aaron opuścił Stack Overflow
źródło
2
Dzięki za wskazówkę, włączyłem tryb CUA. Jeśli chodzi o drugą wskazówkę, jedną z moich pierwotnych motywacji do nauki ESS było obserwowanie, jak szybko jeden z moich profesorów mógł edytować kod podczas wykładu. Latem jestem poza kampusem, ale po powrocie postaram się znaleźć „mentora”.
Czy