2017-08-29 89 views
2

我不能找到解決這個特定的問題,儘管或多或少類似的問題已經在之前的質疑:[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中運行良好。

  • 如何等待腳本中的用戶輸入在命令行中運行?

回答

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)