用户输入和ESS

时间:2010-12-04 20:58:43

标签: r emacs ess

当您要求ESS从缓冲区(C-c,C-b或类似物)评估以下内容时

par(ask=TRUE)
plot(1,1)
plot(2,1)

解释器进入无限循环,因为ESS使用参数--no-readline启动R会话。循环可以用C-g打破,但有没有办法让解释器实际请求用户输入?

2 个答案:

答案 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文件。

文件可能是(目录的位置取决于您的操作系统)

    {li>

    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))
相关问题