强制交互式R会话

7

如何运行一个R脚本并强制交互式会话。在?interactive文档中提到--ess--interactive可以控制这个,但是我没有看到任何效果。

Windows:

C:\Program Files\R\R-3.0.1\bin>R  -e "interactive()" --ess -s
[1] FALSE

Mac:

$ R -e "interactive()" --interactive -s
[1] FALSE

有什么想法吗?

编辑: 我想可以修改根命名空间来解决某些问题(例如install.packages)。但这不是一个好的解决方案...

$ R -e "unlockBinding('interactive',as.environment('package:base'));assign('interactive',function() TRUE,envir=as.environment('package:base'));base::interactive()" --interactive -s
[1] TRUE

2
为什么需要运行一个interactive()为真的脚本? - Matthew Plourde
如果需要用户输入,可以使用 file("stdin")。这与使用 stdin() 不同,后者在运行脚本时将被跳过。 - Matthew Plourde
@MatthewPlourde:对于一些其他的事情,比如默认图形设备等等,它也会出现。 - Dirk Eddelbuettel
2
这是一个用例 @Matthew Plourde:我正在使用Hadley Wickham的testthat库来自动化测试我正在开发的软件包。为了帮助交互式用户处理一些不太明显的行为,我希望我的软件包中的某个功能在用户第一次调用该函数时向交互式用户发出消息(但不会混乱自动化脚本的控制台)。不幸的是,当通过auto_test进行自动化测试时,R会(正确地)报告interactive()为FALSE。使用Ian Fellows的技巧,我能够创建一个模拟交互模式的测试,以确保消息正常工作。 - Keith Twombley
1个回答

5

我们亲爱的littler可替代Rscript,我加入了一个切换功能:

edd@max:~$ r -p -e 'interactive()'
[1] FALSE
edd@max:~$ r -i -p -e 'interactive()'
[1] TRUE
edd@max:~$ 

很可能当你以这种方式调用R时,它会始终将其设置为false。

嗯,那么如果R命令args不能实现它们所说的功能,它们的意义是什么? - Ian Fellows

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