有没有办法让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.
答案 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?