2010-12-04 70 views
2

当你问ESS评估从一个缓冲区(CC,CB,或类似)用户输入和ESS

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

译员进入一个无限循环以下,因为ESS的说法开始R对话--no-readline的。循环可以用C-g打破,但是有什么办法让解释器真正地请求用户输入吗?

回答

0

(策略从谷歌和RSiteSearches聚集):

你看到提示:“返回砸”在任何您的会话窗口?如果是这样......打。

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

如果失败了,应该用c-G控制回来。

编辑:另一种策略,诚然不是解决ESS-非交互性的问题:如果你想保持用户输入,然后readlines方法可采用:

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

提示仅在c-G打开后出现,并且c-G不会从等待用户输入的循环中跳出,它会停止执行剩余的脚本。 – fgregg 2010-12-05 23:42:14

+1

因此,为了清楚起见,会出现一个绘图窗口,尽管在窗口中单击以获得焦点,但您看不到提示? – 2010-12-06 00:45:47

1

一种解决方法是编辑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目录

    。在emacs(^ X^F)中编辑.el文件,然后执行M-x byte-compile-file以生成.elc

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

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

如果你觉得不舒服的.el文件的编辑,你可以直接将其移除(.elc)和仅使用.el版本(应该是只有轻微的性能差异)。