ESS和rpy2在Emacs中共享R进程

3
我是一个相对较新的R用户,并开始使用Emacs Speaks Statistics(ESS)。我还使用rpy2(一个连接Python和R的接口),在Emacs中运行ipython shell时可以启动一个R进程。
是否可能让ESS和rpy2共享同一个R进程,这样我就可以在Python/rpy2中编写一些代码来设置一些R对象,然后切换到ESS并直接运行R命令,而不使用Python/rpy2?
例如,我要么使用M-x R在Emacs中启动R,然后在我的ipython会话中让rpy2.robjects.r指向或使用这个正在运行的R进程;或者我将在Python中启动R,然后让ESS连接到嵌入式Python的R进程。
我想问题在于rpy2中的R进程是嵌入在Python解释器中的,并且如果我可以直接操作R而不经过rpy2,表示R对象的Python对象将变得“不同步”? 我承认我没有完全了解rpy2和Emacs进程处理的工作原理...
2个回答

2
你需要的是基于rpy2技术构建的某种R控制台。这并不难建立。
我想象一下,有一些rpy2接口可以访问R的“eval”函数,然后你只需要一些Python代码来读取行并将它们提供给rpy2.eval(line)或其他函数。这将被包装在一个漂亮的控制台式界面中,具有命令行回收和编辑等功能。
完成交互式R后,您将使用一些代码(而不是'q()'!)退出控制台,并返回到Python解释器。
我认为这个东西还没有被建立,但类似的东西已经存在。Quantum GIS(映射软件)的“manageR”插件提供了一个从Python启动并使用rpy的R控制台。
如果您真的要利用ESS进行此操作,则需要一种将ESS的输入发送到正在侦听的Python进程以提供给R“eval”函数的方法。对我来说有点困难。

0

如Spacedman所回答的那样,使用Python+rpy2构建一个R控制台可能是必要的。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接