ESS和rpy2在Emacs中共享R进程

时间:2011-02-26 05:04:12

标签: r emacs ess rpy2

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

我认为这件事还没有建成,但类似的事情已经存在。 Quantum GIS的'manageR'插件(映射s / w)提供了一个从python启动并使用rpy的R控制台。

如果您真的开始利用ESS,那么您需要某种方式将ESS的输入发送到侦听python进程以提供给R'eval'函数。超越我。

答案 1 :(得分: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模式。