当我尝试以下操作时:
f<-file("stdin")
lines<-readLines(f)
在Ubuntu的R-studio内我可以输入文本但无法终止它。 Ctr + C / D,随机点击键盘无济于事。它只是挂起
到目前为止我才发现了以下内容 How to input EOF in stdin in R? 但没有帮助 - 不得不杀死R-studio。
有人解释有什么问题吗?
答案 0 :(得分:4)
据推测,Rstudio正在重定向stdin,因此无法再以"stdin"
或"/dev/stdin"
正确访问它。但是,stdin()
仍然有效。
我仍然无法实际输入Ctrl + D.但是可以读取固定数量的行:
> a <- readLines(stdin(), n=2)
Hello
World
> a
[1] "Hello" "World"
我还发现了一个可能有助于交互式调试的黑客攻击。让我们说,您的手册示例中最多有10行。然后就可以了
> a <- readLines(stdin(), n=10)
abc
def
ghi
# and now just keep pressing ENTER
...
> a <- a[a != ""]
> a
[1] "abc" "def" "ghi"
如果您在Ctrl + D可用的环境中运行相同的代码,它也会正确终止输入。
警告:但stdin()
不适用于Rscript
:您必须切换回file("stdin")
。此外,在某些环境中,如果您使用readLines
和n=1
逐行读取文件,则最终可能会重新打开文件并每次都获取第一行。似乎将所有内容放入文件中并使用例如一次读取整个文件使用Rstudio开发read.table
是一种更强大的方法。