27

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

当我按 Cg 或 Cc Cc 时,进程被中断,我必须重新启动脚本。

在 ESS / Emacs 中后台处理 R 进程的最佳方法是什么?

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

我想我的问题更笼统一些 - Emacs 可以后台进程让您继续工作吗?

4

3 回答 3

20

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

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

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

(setq ess-eval-visibly nil)

干杯。

[更新]

在最新版本的 ESS 中有一个新设置ess-eval-visibply- 'nowait. 它将您的代码放在一个劣质缓冲区中,然后将其发送到子进程。通过这种方式,您可以看到您的代码和之后的所有输出,而无需等待子流程完成。

[/更新]

于 2011-01-22T09:28:42.427 回答
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 会话(缓冲区)。如果您只有一个会话,它将自动切换到那里。

于 2010-05-05T12:15:36.687 回答
-3

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

于 2010-05-06T05:26:05.767 回答