Какие полезные рекомендации / советы для изучения Emacs Speaks Statistics (с 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, но он пытается сопоставить его с тем, который уже есть в вашей строке. Так, например, ввод plR-процесса и нажатие \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очень помогают в таких ситуациях.

mpiktas
источник
Благодарю вас! Эта информация очень полезна, я постараюсь настроить мои настройки Emacs аналогичным образом. Что касается специфических особенностей операционной системы, я нахожусь на Linux (Fedora 15), поэтому я не уверен, имеет ли это какое-либо значение в конфигурации / расположении.
Будет ли
С Fedora вы должны получить простой emacs. Я бы порекомендовал установить ESS вручную, а не использовать версию, поставляемую Fedora, так как она может быть слишком старой. Итак, сначала проверьте, как работает текст и какой ключ является мета. Я подозреваю, M-w C-y C-wбудет работать как копировать, вставлять, вырезать.
mpiktas
2

В зависимости от того, где вы находитесь, это может не сработать для вас, но я нашел кого-то в коридоре, который использовал его и приставал к ним с вопросами. Придерживайтесь этого, оно того стоит!

Один совет, который я нашел особенно полезным, состоял в том, чтобы использовать cua-mode; это позволяет emacs использовать некоторые из наиболее распространенных сочетаний клавиш (например, сохранить, вырезать, копировать и т. д.) в современных программах. Я также обнаружил, что режим прямоугольника гораздо проще использовать в режиме cua.

Аарон оставил переполнение стека
источник
2
Спасибо за совет, я включил режим CUA. Что касается другого совета, одна из моих первоначальных мотиваций для изучения ESS заключалась в том, как быстро один из моих профессоров мог редактировать код во время лекции. Я ухожу из кампуса на лето, но постараюсь найти «наставника», когда вернусь.
Уилл