linux - 在 R studio 中使用标准输入

标签 linux r stdin rstudio

当我尝试以下操作时:

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("标准输入”)。此外,在某些环境中,如果您使用 readLinesn=1 来逐行读取文件,您最终可能会重新打开文件并获取第一行每次。似乎将所有内容放入文件并使用例如一次读取整个文件read.table 是一种使用 Rstudio 进行开发的更强大的方式。

关于linux - 在 R studio 中使用标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191232/

相关文章:

python - 在 python 中,如何检查标准输入流 (sys.stdin) 的结尾并对此做一些特殊的事情

linux - 如果满足偶然性,用文件 1 中的模式替换文件 2 中的模式

R dplyr根据其他行中的值过滤数据

无法从C 中的管道中执行读取?

r - 如何绘制因子的每个水平

r - com.google.android.material.R 无法解析底部导航 View 的符号 'R'

objective-c - 多次处理潜在的大型 STDIN 数据

regex - 变量是变量 bash 的子字符串

linux - GNU malloc_info() : get really allocated memory?

Linux - 在软链接(soft link)中执行命令