在按下某个键之前,如何暂停代码执行?

Mak*_*212 5 user-interface r

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

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

readline(prompt="Press [enter] to continue or [esc] to exit")
Run Code Online (Sandbox Code Playgroud)

作为一个独立的代码行,这可以按预期工作,但只要我在其下面添加代码,并将整个块发送到控制台,它就会直接通过readline调用而不停止:

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

x <- 1
y <- 2
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过包装readline函数,但它仍然不起作用

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

pause()

x <- 1
y <- 2
Run Code Online (Sandbox Code Playgroud)

编辑:

如果我通过脚本调用脚本source(),readline可以正常工作.有没有办法在不这样做的情况下获得这种行为?

int*_*ect 2

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

如果这样做,R 将在收到后立即按照接收到的顺序运行每一行。如果任何一行尝试接受输入,该输入将来自您复制粘贴的任何内容。所以如果你复制粘贴这个:

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

x <- 1
y <- 2
Run Code Online (Sandbox Code Playgroud)

R 将首先读取并运行第一行。第一行将运行并读取下一行输入(此处为空行)。然后R会回来读取并执行另外两行。

在运行任何代码之前,您需要将代码完全输入到 R 中。尝试将整个事情包装在一个函数中:

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