我正在尝试让 R 暂停代码执行,以便用户查看一些先前的控制台输出,以验证文件链接是否已正确匹配(使用 RegEx 将文件名与其各自的对象匹配(。
从其他一些答案中,我想出了:
readline(prompt="Press [enter] to continue or [esc] to exit")
作为独立的代码行,它按预期工作,但是一旦我在它下面添加代码,并将整个块发送到控制台,它就会直接通过readline
调用而不停止:
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
确实可以正常工作。有没有办法在不这样做的情况下获得这种行为?
通过"将整个块发送到控制台",听起来像是将代码复制粘贴到正在运行的 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()
使用scan
始终有效:
message("Press [enter] to continue or [esc] to exit")
scan(quiet = TRUE, what = "")