尝试读取输入时尝试使用"连接"会导致R冻结或崩溃

qq3*_*254 4 r rstudio

抱歉,我在标题中使用的术语可能无法正确使用.每当我尝试运行此代码时,似乎它正在尝试运行它但从未完成命令.当我单击停止命令符号(红色)时,它不执行任何操作.我无法关闭R.所以为什么这需要永远运行?

con <- file('stdin', open = 'r')

inputs <- readLines(con)
Run Code Online (Sandbox Code Playgroud)

duc*_*ayr 5

在RStudio中工作时,您需要使用readLines(stdin())而不是readLines(file('stdin')),但是如果在终端中运行R,则可以使用.

但是,由于您使用的是RStudio,因此未指定输入行数也存在问题.从stdin读取输入时,Ctrl+ D表示输入结束.但是,如果你是从RStudio这样做而不是从终端Ctrl+ D不可用,那么没有指定输入行就没有办法终止stdin的读取.

因此,如果您从终端运行R,您的代码将起作用,并通过Ctrl+ 发出输入结束的信号D.如果你必须在RStudio工作,你仍然可以使用,readLines(stdin()) 如果你知道输入的行数 ; 例如,

> readLines(stdin(), n=2)
Hello
World
[1] "Hello" "World"
Run Code Online (Sandbox Code Playgroud)

另一种解决方法是使用scan(),例如:

> scan(,'')
1: Hello
2: World
3: 
Read 2 items
[1] "Hello" "World"
Run Code Online (Sandbox Code Playgroud)

(在第三行,我只是按下来Enter终止输入).优点是您不需要事先知道输入行数.