让R等待控制台输入?

时间:2014-04-10 07:17:01

标签: r user-interaction

有没有办法让R在继续之前等待控制台输入? 假设我在一个名为run.R的主脚本中输入了两个这样的脚本:

# some more R Code here

source("script1.R")
source("script2.R")

# some more R Code there

Script1包含一些readLine语句,要求用户输入用户名。 不幸的是,如果我只运行整个run.R文件R不等待输入用户名。在输入用户名之前启动script2.R会导致错误,因为第二个脚本需要用户名。

对于使用R Studio的.rs.askForPassword实际上等待输入,但是覆盖了密码,我有一个丑陋的解决方法。密码很酷,但用户名不是很多。此外,它是一个RStudio功能,而不是R.

3 个答案:

答案 0 :(得分:4)

readline只能用于交互式会话。在readline的非交互式使用中,结果是空字符串。在?interactive的帮助页面上,您可以找到有关交互式会话的以下内容:

  

GUI控制台将安排在交互式会话中启动R.当R   在终端中运行(通过Windows上的Rterm.exe),它假定它是   如果'stdin'连接到(伪)终端而不是if,则交互   'stdin'被重定向到文件或管道。命令行选项   --interactive(Unix)和--ess(Windows,Rterm.exe)覆盖默认假设。

答案 1 :(得分:4)

尝试scan功能。

这是test.R档案:

y <- 2
cat('y=',y)
cat("\nEnter username")
x <- scan(what=character(),nmax=1,quiet=TRUE)
"ala ma kota"
y <- 2*2
cat('y=',y)
cat('\nx=',x)

然后我运行它:

> source("test.R")
y= 2
Enter username
1: login
y= 4
x= login

- edit-- 悄悄地只读一个角色:

> x <- scan(what=character(),nmax=1,quiet=TRUE)
1: username
> x
[1] "username"

what设置类型,nmax设置要读取的最大元素数,quiet确定是否打印一行,说明已读取了多少项。

答案 2 :(得分:0)

为什么不放

source("script2.R")

进入文件script1.R?