R:如何提示用户从控制台输入?

时间:2017-05-16 21:40:41

标签: r

我对R很新,但我很难使用CRAN开发环境(R:3.4.0)来运行它。我希望能够在控制台窗口中输入要求输入两个数字的脚本(一次性而不是一行一行)。我使用过readline,因为很多海报都在其他地方推荐过。问题是,readline不等待用户输入;正如在其他地方的答案和文档中所建议的那样,我预计这会像C中的scanf一样,但不管下一行代码如何,它都会继续 - 你没有机会输入数据

n1<-readline(prompt="Enter skip 1: " )
n2<-readline(prompt="Enter skip 2: " )
n1<-as.integer(n1)
n2<-as.integer(n2)

1 个答案:

答案 0 :(得分:4)

Readline会等待用户的输入。但问题在于,在您的情况下,当您一次运行所有代码时,R会将'n2&lt; -readline(prompt =“Enter skip 2:”)视为用户的输入(确实是)第一条。这是问题的根源。

所以基本上你有两个选择来处理你的问题,第一个是在R中找到一些特定的包,在提示时停止R执行过程;第二个是坚持R基,但只在文件的结尾块中使用readline。在你的情况下,你可以使用这样的小技巧:

{
n1<-readline(prompt="Enter skip 1: " )
n2<-readline(prompt="Enter skip 2: " )
n1<-as.integer(n1)
n2<-as.integer(n2)
}

这个技巧背后的基本原理是:当R读取{和}之间的东西时,它会把所有的东西都当作一个整体命令处理,这是代码的结束块,所以它的行为就像你的想。 R不会将此命令的一部分提供给命令的另一部分,从而可以防止您遇到的问题。

你可以自己开发类似的技巧,比如把readline放在一个函数中:

foo <- function(){
    n1<-readline(prompt="Enter skip 1: " )
    n2<-readline(prompt="Enter skip 2: " )
    n1<-as.integer(n1)
    n2<-as.integer(n2)
    c(n1, n2)
}

foo()

在这种情况下,整个foo函数将充当代码的结束块,并且所有内容都可以按您的需要工作。希望这会有所帮助。