2016-04-12 6 views
3

Ich entwickle ein R-Skript in RStudio, das vom Benutzer die Eingabe von zwei Werten erfordert (Vor- und Nachname). Diese Eingaben werden später für die Mustererkennung eines Textdokuments verwendet.R-Skript ausführen, das Benutzeraufforderungen anfordert und einbezieht

In Python würde raw_input verwendet werden, um diese Werte zu sammeln, und ich verstehe, dass readline (prompt =) ist die zugehörige Funktion in R, aber ich kann nicht scheinen mein Skript zu stoppen, um nach einem Wert zu fragen. Stattdessen hängt es die nächste Codezeile an.

Meine Funktion den Benutzer nach Namen zu veranlassen ist:

askForName <- function(firstOrLast){ 
    if(firstOrLast == "first"){ 
    x <- readline(prompt = "Enter first name: ") 
    } 
    else if(firstOrLast == "last"){ 
    x <- readline(prompt = "Enter last name: ") 
    } 
    return(x) 
} 

Wenn ich laufen:

firstName <- askForName("first") 
lastName <- askForName("last") 

Die Konsole kehrt:

> firstName <- askForName("first") 
Enter first name: lastName <- askForName("last") 

Wie kann ich R warten bekommen für einen vom Benutzer eingegebenen Wert, bevor Sie mit dem Skript fortfahren?

+0

Dies ist nicht, wie Sie dies tun. Wie auch immer, die Dokumentation sagt eindeutig "[readline] kann nur in einer interaktiven Sitzung verwendet werden.". – Roland

+0

Entweder lassen Sie Ihren Benutzer die Parameter als Funktionsparameter eingeben oder gehen Sie den ganzen Weg und verwenden Sie etwas wie glänzend. – Roland

Antwort

1

Wenn Sie ein Skript ausführen, das diese Funktionsaufrufe enthält, funktioniert es ordnungsgemäß. Das Problem ist in diesem Fall, dass Sie eine Zeile nach dem "readline" -Aufruf einfügen. Ich habe das gerade getestet und es funktioniert gut, wie es in Produktionscode von der Firma verwendet, für die ich arbeite.

test.r:

askForName <- function(firstOrLast){ 
    if(firstOrLast == "first"){ 
    x <- readline(prompt = "Enter first name: ") 
    } 
    else if(firstOrLast == "last"){ 
    x <- readline(prompt = "Enter last name: ") 
    } 
    return(x) 
} 

firstName <- askForName("first") 
lastName <- askForName("last") 

Dann:

source("test.R") 
Enter first name: Alan 
Enter last name: O'Callaghan 
0

Try this statt readline:

cat("a string please: ") 
a <- readLines("stdin",n=1); 
cat(a, "\n") 
0

Sie können eine Funktion typeline create() eine Eingangsleitung zu lesen und verwende dann das Ergebnis für deine nächsten Befehle. Es wird auf Ihren Eingabetext warten, entweder Sie Ihren Code in Rstudio oder in Terminal ausführen:

Verwandte Themen