使readline等待R中的输入

时间:2014-11-24 19:12:14

标签: r

我试图让我的代码问我" 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中RScriptsource或运行它(即选择代码并按run或CTRL输入)。

3 个答案:

答案 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)

虽然它需要交互模式,但我发现 utils 包中的 askYesNo() 函数为真/假(或更准确地说是/否)问题提供了一个漂亮、简单的用户界面.例如,以下代码将生成以下对话框。

Yes No Dialog

  • 是返回 TRUE
  • 没有退货FALSE
  • 取消返回NA