Які хороші посилання / поради щодо вивчення статистики розмов Emacs (з R)?


9

Я використовую R кілька років, але завжди користувався графічним інтерфейсом, як Tinn-R, JGR, і останнім часом R-Studio.

Хоча мені подобається інтерфейс R-Studio, я відчуваю, що для довших програм з малою кількістю графіки / без графіку я можу ефективніше кодувати, скориставшись ярликами, запропонованими більш базовим текстовим редактором, як Emacs.

Я встановив Emacs та плагін ESS, все працює належним чином, і я протестував якийсь код, але мені важко звикнути до цього, і я не знайшов відповідного посібника.

Пошуки Google повертають кілька дуже датованих веб-сайтів з навчальними посібниками, які зосереджуються насамперед на встановленні та налаштуваннях плагінів, а посібник на офіційному веб-сайті для мене трохи надто щільний.

Я шукаю порівняно короткий вступ (в ідеалі зі скріншотом та списком гарячих клавіш), призначений для того, хто знайомий з R, але не Emacs.

Будемо дуже вдячні за будь-які посилання чи інші поради щодо початку роботи.

Відповіді:


11

Спочатку вам потрібно буде вивчити основний текст, що працює з emacs. Оскільки emacs дуже складний, то з’ясування того, як просто вибрати текст і скопіювати, може бути проблемою. Тому вкладайте певний час у пошук того, як це зробити ефективно. Читання посібника може допомогти. Для Mac OS X використовуйте Aquamacs, він підтримує нативні ярлики.

Робота з ESS не відрізняється від роботи з R. Ті ж правила щодо організації коду повинні застосовуватися. У моєму випадку у кожного проекту є своя директорія, яка знаходиться в батьківському каталозі під назвою R, який знаходиться в моєму домашньому каталозі (для Windows я рекомендую вказати домашній каталог emacs на той каталог, де знаходиться все ваше джерело). Тому коли я використовую ESS для роботи над проектом, я завжди роблю M-x Rі вибираю початкову директорію свого каталогу проектів.

Після запуску процесу R я зазвичай ділю emacs на два вікна (терміналогія emacs). Потім ліворуч у мене є вихідний код, який я надсилаю до процесу R справа. Відповідні ярлики (це ярлики Emacs) призначені C-x 3для розділення вікон вертикально, C-x 1для того , щоб зробити поточний буфер єдиним вікном і C-x 2для розділення вікон по горизонталі.

Відправляючи код на R, я зберігаю різницю між функціями та R-операторами. Я роблю це, зберігаючи всі свої функції в одному файлі, який зазвичай називають 10code.R. Тоді я можу просто завантажити цей файл, використовуючи опцію завантаження ESS-файлу (ярлик C-c C-l). Перевага такого підходу полягає в тому, що він джерело всіх функцій і нічого не виробляє в буфері R. Якщо у вашому коді є помилка, ESS показує повідомлення в мінібуфері, і ви можете розслідувати його, натиснувши кнопку C-c`.

Інший код - це твердження R, які я намагаюся тримати не пояснюючи: завантажуйте дані, очищайте дані, підхожуйте статистичну модель, перевіряйте результати, дайте кінцеві результати. Вихідним кодом цих тверджень є поточний статус проекту. Намір полягає в тому, що після завершення проекту, джерело файлів з цим кодом відтворює проект (я також використовую git для відстеження історії). Під час роботи з цим файлом я зазвичай працюю лише з одним оператором R, який я надсилаю в процес R за допомогою функції eval, абзацу, команди заяви, який ярлик є C-c C-c. Ця команда відправляє в R обробку абзац, тобто текст, який розмежований новими рядками. Це зручно, оскільки ви можете згрупувати оператори R у завдання та відправити ціле завдання в R-процес. Він також не вимагає підбору тексту, що також дуже зручно. ЯрликC-c C-c має перевагу в тому, що він переміщує курсор до вікна R, тому ви можете негайно перевірити результати відправленого оператора R.

Тому мій базовий робочий процес дуже сильно переміщується між вікнами та буферами. Щоб полегшити це, я використовую такі ярлики у своєму файлі .emacs:

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

Я рідко використовую f1, але всі інші дуже часто. Інші конкретні налаштування ESS, які я використовую, такі:

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

Це дозволяє ESS зробити вкладку шириною 4 символи (за замовчуванням - 2), що є моїм особистим уподобанням, і розширює кількість виданих команд, які ESS зберігає як історію.

Для прямої роботи з процесом R я виявив дуже корисними такі ярлики:

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

Це нагадує твердження R з історії ваших R заяв, але воно намагається співставити його з тим, яке вже є у вашій лінії. Так, наприклад, набір тексту plв процесі R та натискання \C-up(це контроль і стрілка вгору) будуть проходити через усі оператори, які починаються з plцього пункту, тому буде нагадувати, наприклад, всі plot(...команди.

Кінцевий параметр, який я використовую з ESS, є наступним:

(setq ess-ask-about-transfile t)

Таким чином ESS завжди запитує, куди зберегти текст у буфері за допомогою процесу R. Зазвичай я нумерую ці файли за датою, тому у мене завжди є інший спосіб відстежити, що саме я роблю. Єдине застереження цього варіанту полягає в тому, що з певних причин ESS встановлює буфер R тільки для читання після завантаження R. Ярлик для створення буфера для запису є C-x C-q.

Тож це мої налаштування, які я використовую для роботи з ESS, я відчуваю себе задоволеним, і я вже кілька років нічого не відчував потреби додавати. Коли я впроваджую ESS для користувачів, які вперше починаються, я зазвичай даю цей огляд.

Я закінчу завершальним ярликом, який для мене є найбільш часто використовуваним ярликом при роботі з Emacs і, зокрема, з ESS, C-gякий запускає команду в міні-буфері. Протягом усіх років, що я працюю з Emacs та ESS, я все ще встигаю викликати якусь команду Emacs, яку я не хотів, C-gдуже корисна в цих ситуаціях.


Дякую тобі! Ця інформація дуже корисна, я спробую налаштувати налаштування Emacs аналогічним чином. Щодо конкретних моментів для операційної системи, я перебуваю на Linux (Fedora 15), тому я не впевнений, чи це має значення в конфігурації / компонуванні.
Буде

З Fedora ви повинні отримати простих emacs. Я рекомендую встановити ESS вручну, а не використовувати версію Fedora, оскільки це, можливо, занадто стара. Отже, спочатку перевірте, яким чином маніпулюється текстом та який ключ є мета. Підозрюю, він M-w C-y C-wбуде працювати як копіювати, вставляти, вирізати.
mpiktas

2

Залежно від того, де ви знаходитесь, це може не підійти для вас, але я знайшов когось із залу, який користувався ним, і набридав їм питаннями. Дотримуйтесь цього, воно того варте!

Одна порада, яку я вважав особливо корисною, - це використовувати режим cua; це змушує emacs ділитися деякими найпоширенішими комбінаціями клавіш (наприклад, зберегти, вирізати, скопіювати тощо) із сучасними програмами. Я також знайшов режим прямокутника набагато простішим у використанні в режимі cua.


2
Дякую за пораду, я включив режим CUA. Що стосується іншої підказки, одна з моїх оригінальних мотивацій до вивчення ESS спостерігала, як швидко один з моїх професорів міг редагувати код під час лекції. Я влітку від кампусу, але спробую знайти «наставника», коли повернусь.
Буде
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.