我试图让我的代码问我" TRUE"或者" FALSE"继续前的价值。
如果我一次运行一行,它目前工作正常,但是当我在RStudio中一次运行所有代码时,它只是继续而不等待用户输入并记录值""我的参数。
raw <- readline("TRUE or FALSE -- this is a validation run: ")
if (raw == "F" | raw == "FALSE" | raw == "False"){
validation <- F
} else{
validation <- T
}
rm(raw)
理想情况下,无论我如何运行它,我都希望得到一个有效的答案 - 在RStudio中RScript
,source
或运行它(即选择代码并按run
或CTRL输入)。
答案 0 :(得分:16)
如果您想在交互模式下执行此操作,那么您已经有了答案但不能与Rscript一起使用。对于该实例,您需要使用cat
:
如果此测试文件名为&#39; prompt.r&#39;并且位于您在系统控制台会话中工作的目录中:
cat("a string please: ");
a <- readLines("stdin",n=1);
cat("You entered")
str(a);
cat( "\n" )
然后您可以从命令行运行它
$ Rscript prompt.r
如果你想要一个多用途脚本,那么这将在交互条件下运行你的脚本,而我的脚本用于非交互式脚本:
if (interactive() ){raw <-
readline("TRUE or FALSE -- this is a validation run: ")
if (raw == "F" | raw == "FALSE" | raw == "False"){
validation <- F
} else{
validation <- T
}
rm(raw) } else{
# non-interactive
cat("a string please: ");
a <- readLines("stdin",n=1);
cat("You entered")
str(a);
cat( "\n" )}
答案 1 :(得分:10)
您是否通过突出显示行并单击运行来运行代码?如果是这样,那可能是您的问题,因为R是逐行输入终端中的代码。
相反,编写脚本(或注释掉您未测试的部分)并单击源按钮。然后R等待用户响应,而不是将readline()之后的行输入readline()。
我和你有同样的问题,这促使我寻找答案。但后来我尝试了这种执行代码的不同方法,并且工作正常。
答案 2 :(得分:1)