当您要求ESS从缓冲区(C-c,C-b或类似物)评估以下内容时
par(ask=TRUE)
plot(1,1)
plot(2,1)
解释器进入无限循环,因为ESS使用参数--no-readline启动R会话。循环可以用C-g打破,但有没有办法让解释器实际请求用户输入?
答案 0 :(得分:1)
解决方案是修改ess-r-d.el
并删除授予--no-runtime
的硬编码R
选项,它是最新实现的第127行。
更改
(let* ((r-always-arg
(if (or ess-microsoft-p (eq system-type 'cygwin))
"--ess "
"--no-readline "))
到
(let* ((r-always-arg
(if (or ess-microsoft-p (eq system-type 'cygwin))
"--ess "))
如果有编译版本,则必须编译.el
以生成并替换二进制.elc
文件。
文件可能是(目录的位置取决于您的操作系统)
在site-lisp
目录中。编辑emacs中的.el
文件(^ X ^ F),然后M-x byte-compile-file
生成.elc
。
如果您从整个zip / tar源包安装在lisp
目录中。在这种情况下,在更改后,执行make
,然后执行make install
。
您当然需要write
访问.el
和.elc
个文件。
如果您对编译.el
文件感到不舒服,可以将其删除(.elc
)并仅使用.el
版本(应该只是轻微的表现)差)。
答案 1 :(得分:0)
(从Google和RSiteSearches收集的策略):
您是否在任何会话窗口中看到提示:“点击返回”?如果是这样......点击。
如果没有,请尝试点击绘图窗口。
如果失败了,你应该用c-G来控制。
编辑:进一步的策略,无可否认无法解决ESS非交互性问题:如果您想保留用户输入,则可以使用readLines:
input=file("stdin")
print(readLines(input,1))