当您要求 ESS 从缓冲区(Cc、Cb 或类似)评估以下内容时
par(ask=TRUE)
plot(1,1)
plot(2,1)
解释器进入无限循环,因为 ESS 使用参数 --no-readline 启动 R 会话。循环可以用 Cg 打破,但是有什么方法可以让解释器真正请求用户输入?
一个解决方案是编辑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
目录中。.el
在 emacs (^X^F) 中编辑文件,然后M-x byte-compile-file
生成.elc
.
如果您从整个 zip/tar 源包安装,则在lisp
目录中。在这种情况下,更改后,执行 amake
后跟 a make install
。
您当然需要write
访问.el
和.elc
文件。
如果您对文件的编译感到不满意.el
,您可以简单地将其删除 ( .elc
) 并仅使用.el
版本(应该只有轻微的性能差异)。
(从 Google 和 RSiteSearches 收集的策略):
您是否在任何会话窗口中看到提示:“点击返回”?如果是这样……打。
如果没有,请尝试单击绘图窗口。
如果失败了,你应该用 cG 重新控制。
编辑:另一个策略,诚然没有解决 ESS 非交互性问题:如果您想保留用户输入,则可以使用 readLines:
input=file("stdin")
print(readLines(input,1))