我正在使用svDialogs(用于zenity的R包装库(来创建GUI弹出框,当我通过R studio或R终端会话(运行Ubuntu 16.04(运行代码时,这工作正常。
一个最小的例子是:
library(svDialogs)
dlgMessage("Hello Stackoverflow!")
但是,当我直接通过终端运行代码时,它不起作用:
Rscript --vanilla -e 'source("path/to/file.R")'
终端显示库已加载,并且不显示错误消息:但弹出窗口没有出现!如果我在调用 dlgMessage 之后添加一行,该行就会运行。即如果我运行修改后的代码
library(svDialogs)
dlgMessage("Hello Stackoverflow!")
print("Goodbye Stackoverflow!")
然后第二行确实显示在终端窗口中(即代码不会在 dlgMessage 处崩溃(。
如果有一个工作许可证,很高兴解决方案不依赖于dlgMessage:我以前尝试过使用system((通过R本机使用Zenity,但无法使其工作。
R 可以在交互或非交互模式下运行,默认值取决于是否假定存在人工操作员,请参阅交互式文档。
在非交互模式下运行时,R 不会显示任何弹出框。默认情况下,在终端中运行代码时,R 以非交互模式运行。按照上面的文档,这可以通过使用 linux 中的命令来覆盖
R --vanilla --interactive < "path/to/file.R"
同样,在Windows中使用--ess
与Rterm.exe