来自R / Rgui的`system()`interactive .exe / binary

时间:2012-03-08 03:32:23

标签: r

我想在R。

中使用system()运行交互式二进制文件

通过交互式,假设我想从R内部运行python命令行解释器(谁知道原因,但无论如何......)。

当我从命令行运行R(即Rterm)时,我可以像这样启动python解释器:

> system('python.exe')
Python 2.7.2 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> # I can now type in python commands and basically use the python 
    # interpreter until I've had enough. 
    # Now I'll exit the python interpreter:
>>> exit()
> # Presto, I'm back to the R prompt!

关键是,我可以从R与python解释器进行交互,就像我从一开始就从命令行启动解释器一样,当我完成回到R的时候我可以退出它提示。

现在,让我们尝试使用R GUI:

> system('python.exe')
Python 2.7.2 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
> # eh? it exitted?

这只运行python.exe(显示欢迎消息),但随后立即退出 - 我无法与python解释器交互。

我的问题是 - 是否有任何方式(在R GUI中,即Windows窗口中)运行该解释器并以与从R的任何命令行版本相同的方式与其交互?

(仅供参考 - 当我第一次开始学习如何编写R软件包时,我作为我的第一个R软件包的目标只是为了能够在R中播放nethack。工作得很漂亮(我使用linux&因此命令行R),除非我把它带到Windows RGui它会启动进程但不是交互式的,有效地锁定R直到我强行结束NetHack.exe进程。)

1 个答案:

答案 0 :(得分:4)

我解决了 - 必须阅读Windows下的帮助文件(原来unix& windows ?system不同):

  

请勿尝试运行需要Rgui设置intern=TRUEshow.output.on.console=TRUE的用户输入的控制台应用程序。他们不会工作。

看起来我能得到的最好(无论如何来自Rgui)是一个新窗口:

system('NetHack.exe',invisible=FALSE,wait=FALSE)

我会为此添加if ( .Platform$GUI == "Rgui" )项检查并正确设置参数。

(Huzzah,继续寻求NetHackR!)