用户输入和 ESS

发布于 2024-10-06 09:19:15 字数 189 浏览 1 评论 0原文

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

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

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

When you ask ESS to evaluate the following from a buffer (C-c, C-b, or similar)

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

The interpreter goes into a infinite loop because ESS starts the R session with the argument --no-readline. The loop can be broken with C-g, but is there any way to get the interpreter to actually request user input?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱殇璃 2024-10-13 09:19:15

解决方案是编辑ess-rd.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 目录中。在 emacs 中编辑 .el 文件 (^X^F),然后执行 Mx byte-compile-file 生成 .elc

  • 如果您是从整个 zip/tar 源代码包安装的,则位于 lisp 目录中。在这种情况下,更改后,执行 make,然后执行 make install

当然,您需要对 .el.elc 文件具有 write 访问权限。

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

A solution is to edit ess-r-d.el and remove the hard-coded --no-runtime option given to R, it is line 127 of the latest implementation.

Change

  (let* ((r-always-arg
      (if (or ess-microsoft-p (eq system-type 'cygwin))
          "--ess "
        "--no-readline "))

to

  (let* ((r-always-arg
      (if (or ess-microsoft-p (eq system-type 'cygwin))
          "--ess "))

If there is a compiled version, you have to compile the .el to generate and replace the binary .elc file.

The file may be (the location of the directory depends on your OS)

  • in the site-lisp directory. Edit the .el file in emacs (^X^F) then do M-x byte-compile-file to generate the .elc.

  • if you installed from the whole zip/tar source package, in the lisp directory. In this case, after the change, perform a make followed with a make install.

You need of course to have write access to the .el and .elc files.

If you do not feel comfortable with the compilation of the .el file, you may simply remove it (.elc) and use only the .el version (should be only a slight performance difference).

半窗疏影 2024-10-13 09:19:15

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

您是否在任何会话窗口中看到提示:“按 Return”?如果是这样的话……打。

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

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

编辑:进一步的策略,诚然没有解决 ESS 非交互性问题:如果你想保留用户输入,那么可以使用 readLines:

input=file("stdin")
print(readLines(input,1))

(Strategies gathered from Google and RSiteSearches):

Do you see the prompt : "hit Return" in any of your session windows? If so ... hit .

If not, then try clicking in the plot window.

And if that fails, you should get control back with c-G.

Edit: A further strategy, admittedly not solving the ESS-non-interactivity problem: If you want to hold for user input, then readLines can be used:

input=file("stdin")
print(readLines(input,1))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文