2

当您要求 ESS 从缓冲区(Cc、Cb 或类似)评估以下内容时

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

解释器进入无限循环,因为 ESS 使用参数 --no-readline 启动 R 会话。循环可以用 Cg 打破,但是有什么方法可以让解释器真正请求用户输入?

4

2 回答 2

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目录中。.el在 emacs (^X^F) 中编辑文件,然后M-x byte-compile-file生成.elc.

  • 如果您从整个 zip/tar 源包安装,则在lisp目录中。在这种情况下,更改后,执行 amake后跟 a make install

您当然需要write访问.el.elc文件。

如果您对文件的编译感到不满意.el,您可以简单地将其删除 ( .elc) 并仅使用.el版本(应该只有轻微的性能差异)。

于 2010-12-08T03:23:28.083 回答
0

(从 Google 和 RSiteSearches 收集的策略):

您是否在任何会话窗口中看到提示:“点击返回”?如果是这样……打。

如果没有,请尝试单击绘图窗口。

如果失败了,你应该用 cG 重新控制。

编辑:另一个策略,诚然没有解决 ESS 非交互性问题:如果您想保留用户输入,则可以使用 readLines:

input=file("stdin")
print(readLines(input,1))
于 2010-12-04T22:50:24.053 回答