当您要求ESS从缓冲区(C-c、C-b或类似)评估以下内容时
par(ask=TRUE)
plot(1,1)
plot(2,1)解释器进入无限循环,因为ESS使用参数--no-readline启动R会话。循环可以用C-g中断,但是有没有办法让解释器真正请求用户输入呢?
发布于 2010-12-08 11:23:28
一种解决方案是编辑ess-r-d.el并删除提供给R的硬编码--no-runtime选项,这是最新实现的第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目录中的
.elc..el文件,然后执行M-x byte-compile-file,以生成从lisp目录中的整个zip/tar源码包安装的emacs。在这种情况下,在更改之后,先执行make,然后执行make install.当然,您需要拥有对.el和.elc文件的write访问权限。
如果您对.el文件的编译感到不舒服,可以简单地删除它(.elc),只使用.el版本(应该只有很小的性能差异)。
发布于 2010-12-05 06:50:24
(从谷歌和RSiteSearches收集的策略):
您是否在任何会话窗口中看到提示:“点击Return”?如果是的话..。命中。
如果没有,请尝试在绘图窗口中单击。
如果失败了,你应该用c-G重新获得控制权。
编辑:另一个策略,诚然不能解决ESS的非交互性问题:如果你想等待用户输入,那么可以使用readLines:
input=file("stdin")
print(readLines(input,1))https://stackoverflow.com/questions/4355798
复制相似问题