R脚本,用户从命令行输入

时间:2017-08-29 06:42:55

标签: r

我找不到这个特定问题的解决方案,尽管之前已经质疑过或多或少类似的问题:

从bash运行脚本很容易,但是一旦需要用户交互,我就无法找到解决方案。请考虑以下示例:

userInput<-function(question) {
  n = 0
  while(n < 1 ){
    n <- readline(question)
    n <- ifelse(grepl("\\D",n),-1,as.integer(n))
    if(is.na(n)){break}  # breaks when hit enter
  }
  return(n)
}

investedLow<- userInput("Invested value in low risk since last time: ")

现在,如果我将此脚本保存为test.R并为R --no-save < teste.R运行,则会运行整个脚本,并且不会发生用户输入的时间。

例如,该脚本在Rstudio中运行良好。

  • 如何等待脚本中的用户输入在命令行中运行?

1 个答案:

答案 0 :(得分:0)

这是一个彻头彻尾的黑客攻击,为你更普遍的问题重新设计一个非常具体的专用包:

library(getPass)
userInput<-function(question) {
    n = 0
    while(n < 1 ){
        n <- getPass::getPass(msg = question)
        n <- ifelse(grepl("\\D",n),-1,as.integer(n))
        if(is.na(n)){break}  # breaks when hit enter
    }
    return(n)
}

investedLow <- userInput("Invested value in low risk since last time: ")
print(investedLow)

对此最糟糕的部分可能是getPass隐藏了用户输入。必须有一种方法来修改源代码来解决这个问题。

更新:getPass author pointed out解决方案可能与使用readLines略有不同的解决方案一样简单:

cat(question)
readLines(file("stdin"), n=1)