2012-10-23 38 views
3

以'批处理模式'运行R时,interactive标志设置为false,这可以防止在嵌入/批处理设置的上下文中中断进程的任何用户提示。参见:R交互式和批处理模式以及heIp浏览器

R -e 'interactive()' 

当使用Rscript时,有一些成立。也可以使用interactivity软件包手动设置该标志。为了测试,我们可以尝试:

R -e 'install.packages("anything") 

假设没有CRAN镜已被设置尚未,​​install.packages不会表现出一定的互动镜选择器,而是抛出一个错误,然后退出。

但是,我注意到help?命令仍然有效。例如,下面的命令将显示帮助浏览器,并且在我按下q之前它不会继续。

R -e 'help(lm); 1+2' 

然而,将输出发送一个文件时,它不显示交互式提示,只是转储输出完整的帮助文档:

R -e 'help(lm); 1+2' > output.txt 

我有点困惑,现在约当使用help时会发生什么。为什么即使R在批处理模式下运行时也能获得交互式帮助浏览器?这是R的特性,还是来自Debian/Ubuntu前端?由于R等待使用输入而在内部调用help函数(即Rserve,RInside,JRI等)时,是否有R变得无响应的风险?

回答

1

帮助实际上产生一个新的进程,寻呼机,这就好比是 “少”:

> help(lm); 1+2 
[1]+ Stopped     R -e 'help(lm); 1+2' 
$ ps 
    PID TTY   TIME CMD 
27735 pts/6 00:00:00 bash 
31607 pts/6 00:00:00 R 
31615 pts/6 00:00:00 sh 
31616 pts/6 00:00:00 pager 
31617 pts/6 00:00:00 ps