如何在按键之前暂停执行代码?

时间:2018-06-22 17:13:42

标签: r user-interface

我正在尝试让R暂停代码执行,以供用户查看以前的控制台输出,以验证文件链接是否已正确匹配(使用RegEx将文件名与各自的对象进行匹配)。

从其他一些答案中,我想到了:

readline(prompt="Press [enter] to continue or [esc] to exit")

作为独立的代码行,它可以按预期工作,但是一旦我在代码下面添加代码并将整个块发送到控制台,它就直接通过readline调用而运行:< / p>

readline(prompt="Press [enter] to continue or [esc] to exit")

x <- 1
y <- 2

有没有办法让R实际上在这里暂停?

我也尝试过将readline包装在一个函数中,但仍然无法正常工作

pause <- function(){
 p <- readline(prompt="Press [enter] to continue or [esc] to exit")
 return(p)
}

pause()

x <- 1
y <- 2

编辑:

如果我通过source()调用脚本,则readline可以正常工作。有没有办法做到这一点的方式?

2 个答案:

答案 0 :(得分:2)

通过“将整个块发送到控制台”,听起来好像您正在将代码复制粘贴到正在运行的R实例中。

如果这样做,R会在收到每一行后立即按收到的顺序运行。如果有任何行尝试输入,则该输入将来自您要复制粘贴的任何内容。因此,如果您复制粘贴此内容:

readline(prompt="Press [enter] to continue or [esc] to exit")

x <- 1
y <- 2

R将首先读取并运行第一行。第一行将运行并读取输入的下一行(此处为空行)。然后,R将返回并读取并执行其他两行。

您需要先将代码完全输入到R中,然后再运行。尝试将整个内容包装在一个函数中:

dostuff <- function(){
    readline(prompt="Press [enter] to continue or [esc] to exit")
    x <- 1
    y <- 2
}
dostuff()

答案 1 :(得分:1)

使用scan将始终有效:

message("Press [enter] to continue or [esc] to exit")
scan(quiet = TRUE, what = "")