2017-08-29 1 views
2

ich keine Lösung für dieses spezielle Problem finden kann, auch wenn mehr oder weniger ähnliche Fragen vor in Frage gestellt worden sind:R Skript mit Benutzereingabe von der Kommandozeile

Das Ausführen eines Skripts von bash ist einfach genug, aber sobald ich Benutzerinteraktion benötige, konnte ich keine Lösung finden. Bitte beachten Sie das Beispiel:

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: ") 

Nun, wenn ich dieses Skript als test.R speichern und für R --no-save < teste.R das gesamte Skript ausführen ausgeführt wird, und die Zeit für die Benutzereingabe nicht geschieht.

Das Skript funktioniert z. B. in Rstudio.

  • Warten, bis Benutzereingaben in einem Skript in der Befehlszeile ausgeführt werden?

Antwort

0

ist hier ein Gesamt Hack, einen ganz bestimmten Zweck gebauten Paket für Ihre mehr General Frage Repurposing:

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) 

das Schlimmste an dieser Vielleicht ist das getPass die Benutzereingabe versteckt. Es muss eine Möglichkeit geben, den Quellcode zu ändern, um das zu beheben.

Update: Die getpass author pointed out, dass die Lösung so einfach sein könnte als readLines mit etwas anders:

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