当我尝试以下操作时:
f<-file("stdin")
lines<-readLines(f)
在 Ubuntu 上的 R-studio 中,我可以输入文本但无法终止它。 Ctr+C/D,乱敲键盘也无济于事。它只是挂起
到目前为止我只找到了以下内容 How to input EOF in stdin in R? 但没有帮助 - 不得不杀死 R-studio。
谁能解释一下哪里出了问题?
最佳答案
据推测,Rstudio 正在重定向标准输入,因此它不能再作为 "stdin"
或 "/dev/stdin"
正确访问。但是,stdin()
仍然有效。
我仍然无法实际键入 Ctrl+D。但是可以读取固定数量的行:
> a <- readLines(stdin(), n=2)
Hello
World
> a
[1] "Hello" "World"
我还发现了一个可能有助于交互式调试的 hack。比方说,您的手动示例中最多有 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("标准输入”)
。此外,在某些环境中,如果您使用 readLines
和 n=1
来逐行读取文件,您最终可能会重新打开文件并获取第一行每次。似乎将所有内容放入文件并使用例如一次读取整个文件read.table
是一种使用 Rstudio 进行开发的更强大的方式。
关于linux - 在 R studio 中使用标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191232/