我找不到这个特定问题的解决方案,尽管之前已经质疑过或多或少类似的问题:
从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中运行良好。
答案 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)