什么是学习Emacs口语统计(带R)的良好参考/建议?


9

我已经使用R几年了,但是我一直使用GUI,例如Tinn-R,JGR和最近的R-Studio。

尽管我喜欢R-Studio的界面,但我觉得对于较长的程序,几乎没有/没有图形,我可以利用更基本的文本编辑器(如Emacs)提供的快捷方式来更有效地编码。

我安装了Emacs和ESS插件,一切正常,并且已经测试了一些代码,但是我很难适应它,并且找不到合适的参考手册。

Google搜索返回了一些过时的网站,这些网站的教程主要侧重于安装和配置插件,而官方网站上的手册对我来说有点过于繁琐。

我正在寻找一个相对简短的介绍(最好是带有屏幕快照和热键列表),以供熟悉R而不是Emacs的人士使用。

任何参考或其他入门提示将不胜感激。

Answers:


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。然后,我可以使用load ESS file选项(快捷方式C-c C-l)简单地加载此文件。这种方法的优点是它可以获取所有功能,并且在R缓冲区中不产生任何内容。如果代码中有错误,则ESS在迷你缓冲区中显示一条消息,您可以按C-c` 进行调查。

另一个代码是R语句,我尝试保持不言自明:加载数据,清除数据,拟合统计模型,检查结果并产生最终结果。这些语句的源代码是项目的当前状态。目的是在项目完成之后,使用此代码来采购文件,再生成项目(我也使用git来跟踪历史记录)。使用此文件时,我通常仅使用一个R语句,该语句通过eval函数,段落,语句命令(其快捷方式为)发送到R进程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提供的版本,因为这可能太旧了。因此,基本上首先要检查文本的操作方式以及哪个键是meta。我怀疑M-w C-y C-w可以复制,粘贴,剪切。
mpiktas 2011年

2

视您所在的位置而定,这可能对您不起作用,但是我在大厅下找到了一个使用它的人,并向他们提出问题。坚持下去,值得!

我发现特别有用的一个技巧是使用cua模式。它使emacs与现代程序共享一些最常见的键盘快捷键(如保存,剪切,复制等)。我还发现矩形模式在cua模式下更容易使用。


2
感谢您的提示,我启用了CUA模式。关于另一个技巧,我学习ESS的最初动机之一是观看我的一位教授在一次演讲中编辑代码的速度。我暑假不在校园,但是当我回来时,我会尝试寻找一名“导师”。
威尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.