我想在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进程。)
答案 0 :(得分:4)
我解决了 - 必须阅读Windows下的帮助文件(原来unix& windows ?system
不同):
请勿尝试运行需要
Rgui
设置intern=TRUE
或show.output.on.console=TRUE
的用户输入的控制台应用程序。他们不会工作。
看起来我能得到的最好(无论如何来自Rgui)是一个新窗口:
system('NetHack.exe',invisible=FALSE,wait=FALSE)
我会为此添加if ( .Platform$GUI == "Rgui" )
项检查并正确设置参数。
(Huzzah,继续寻求NetHackR!)