3

我是 R 的一个相当新的用户,并且已经开始使用 Emacs Speaks Statistics (ESS)。我还使用 rpy2(R 的 python 接口),我可以在 Emacs 中运行的 ipython shell 中启动 R 进程。

是否可以让 ESS 和 rpy2 以某种方式共享相同的 R 进程,以便我可以在 Python/rpy2 中进行一些编码以设置一些 R 对象,然后切换到 ESS 并直接运行 R 命令而不使用 python/rpy2?

例如,我会在 Emacs 中使用 启动 R M-x R,然后在我的 ipython 会话中让rpy2.robjects.r指向或使用这个正在运行的 R 进程;或者,我会在 python 中启动 R,rp2.robjects.r然后让 ESS 连接到嵌入 python 的 R 进程。

我猜问题是rpy2中的R进程嵌入在python解释器中,如果我可以直接操作R而不通过rpy2,那么表示R对象的python对象会变得“不同步”?我承认我没有完全了解 rpy2 和 Emacs 进程处理的工作原理......

4

2 回答 2

2

你想要的是某种基于 rpy2 技术的 R 控制台。这并不难构建。

我想R的'eval'函数有一些rpy2接口,所以你只需要一些python代码来读取行并将它们提供给rpy2.eval(line)或其他什么。然后,这将全部包含在一个带有命令行调用和编辑等的漂亮控制台样式界面中。

使用交互式 R 完成后,您将使用一些代码(不是 'q()'!)退出控制台并取回您的 python 解释器。

我认为这个东西还没有建成,但类似的东西已经建成。Quantum GIS(映射软件)的“manageR”插件提供了一个从 python 启动并使用 rpy 的 R 控制台。

如果您真的打算为此利用 ESS,那么您需要某种方式将 ESS 的输入发送到侦听 python 进程以馈送到 R 'eval' 函数。有点超越我。

于 2011-02-26T16:02:22.243 回答
0

正如 Spacedman 所回答的,可能需要使用 Python+rpy2 构建 R 控制台。

但是,最简单的方法可能是在运行 Emacs 之前将其别名为“R”。这样 Emacs 中的“Meta-x R”会调用它而不是“真正的”R 控制台。这只是一部分;如果您希望将 ess R-console 和 python 会话都插入同一个 R,则必须实现某种客户端-服务器层。

与此相关的是,Nathaniel 在他的 rnumpy 中实现了一个非常好的特性(在 rpy2 之上的层,我认为只与 rpy2-2.0.x 兼容)。当与 ipython 一起使用时,可以切换到类似 R 的控制台并返回到 ipython Python 控制台。可以通过 Emacs 运行 ipython,也可以在切换到 R 时激活 ess-R 模式。

于 2011-02-27T13:47:59.967 回答