如何在ESS / Emacs中设置R流程?

时间:2010-05-05 03:57:35

标签: r emacs ess

当我启动R环境时,我经常运行很长的R脚本。我希望能够在Emacs / ESS中加载/运行R脚本,并继续在另一个缓冲区中工作。

当我按下C-g或C-c C-c时,进程被中断,我必须重新启动脚本。

在ESS / Emacs中设置R流程的最佳方法是什么?

编辑:感谢您的回答和评论,但没有一个解决了当您加载/运行大型脚本并且无法更改缓冲区时Emacs冻结的事实。

我认为我的问题更为笼统 - Emacs能否让您继续工作?

3 个答案:

答案 0 :(得分:19)

ESS将R作为异步进程运行。你不需要背景任何东西。您可以运行几个小时的代码,并且仍然可以在ESS中不间断地工作。

你的问题似乎是另一回事。当您执行脚本时,您“明显地”执行它,即您执行的代码将打印到终端。这会导致Emacs冻结。

ess-eval-visibly设置为nil,大量代码将立即发送给R:

(setq ess-eval-visibly nil)

干杯。

[更新]

最近版本的ESS中有ess-eval-visibply的新设置 - 'nowait。它将您的代码放在较差的缓冲区中,然后将其发送到子进程。通过这种方式,您可以在不等待子流程完成的情况下查看代码和所有输出。

[/更新]

答案 1 :(得分:3)

M-x R将启动R会话(默认缓冲区名称为*R*)。如果再次按M-x R,将启动第二个R会话(缓冲区名称为*R:2*)。

每个会话都有自己的R进程,因此您可以在一个进程中运行一个长R脚本,并且仍然可以独立使用另一个。

C-x C-b会显示缓冲区列表,这样您就可以在R会话之间切换。

或者,如果你把

(global-set-key "\C-cr" 'ess-request-a-process)
在您的.emacs初始化文件中

,然后每次按C-c r时,系统都会提示您要切换到哪个R会话(缓冲区)。如果您只有一个会话,它将自动切换到那里。

答案 2 :(得分:-1)

根据我的个人经验,ESS并不擅长处理非常大的脚本,因为有时Emacs的其余部分变得无法使用。也许你最好在ESS中进行开发,然后在BATCH模式下运行完整的脚本。