Erstellen eines Eingabeaufforderungs- / Antwortsystems zur Eingabe von Daten in R.


82

Ich habe einen R-Code für Leute erstellt, die nichts von R wissen (obwohl ich selbst ziemlich grün bin). Ich hatte Leute, die die anfänglichen Daten in die R-Konsole einfügten (mit gemischten Ergebnissen), und ich hatte gehofft, eine benutzerfreundlichere Möglichkeit für die Eingabe von Daten einzurichten.

Im Idealfall kann sich jemand an die Konsole setzen, einen Befehl eingeben und mit spezifischen Fragen zur Eingabe der Daten aufgefordert werden.

Zum Beispiel lädt eine Person r und sieht eine Eingabeaufforderung:

What is x value?

Die Person gibt Folgendes ein:

2

Nächste Eingabeaufforderung:

What is y value?

Person gibt Folgendes ein:

3

Nächste Eingabeaufforderung:

 What are T values?

Person gibt Folgendes ein:

 4,3,2,1

Nächste Eingabeaufforderung:

Was sind V-Werte?

Person gibt Folgendes ein:

4,5,6,9

Und mit diesen 4 neu definierten Variablen (X, Y, T, V) besteht der nächste Schritt von R darin, den vorab geschriebenen Code auszuführen

X+Y
V+T

Und in der Konsole erscheinen die Antworten

5
8 8 8 10

Und alle sind glücklich

Ich entschuldige mich, da dies keine reproduzierbare Code-Frage ist, aber ich bin mir nicht sicher, wie ich R dazu bringen soll, Fragen zu stellen, anstatt mir Fragen zu R zu stellen!

Antworten:


73

Da dies nur als interaktiver Code verwendet werden soll, readline()kann für Sie arbeiten. Ich habe keine Fehlerprüfung hinzugefügt, aber Sie möchten wahrscheinlich eine angemessene Menge davon tun, um eine korrekte Eingabe sicherzustellen. Hier ist das Kernkonzept:

fun <- function(){
  x <- readline("What is the value of x?")  
  y <- readline("What is the value of y?")
  t <- readline("What are the T values?")
  v <- readline("What are the V values?")

  x <- as.numeric(unlist(strsplit(x, ",")))
  y <- as.numeric(unlist(strsplit(y, ",")))
  t <- as.numeric(unlist(strsplit(t, ",")))
  v <- as.numeric(unlist(strsplit(v, ",")))

  out1 <- x + y
  out2 <- t + v

  return(list(out1, out2))

}

3
Der Code funktioniert super! Ich war ein wenig verwirrt darüber, wie ich es starten soll, aber nachdem ich mir die Notizen auf readline () angesehen habe, habe ich nur eine letzte Zeile zu dem obigen "if (interaktive ()) fun ()" hinzugefügt und die Eingabeaufforderung wird automatisch gestartet. Vielen Dank!
Vinterwoo

1
Das ist nett. Ich habe jedoch versucht, genau zu verstehen, was mit den Funktionen unlist und strsplit los ist. Was macht R hier?
Seanosapien

1
@Seanosapien Das Strsplit ist erforderlich, um die Kommas aus der Eingabe zu entfernen, wenn der Benutzer '"4,3,2,1"' wie im ursprünglichen Beispiel eingibt. Es ist nicht erforderlich, wenn die Eingabe nicht in diesem Format vorliegt.
Lauren Fitch

56

Siehe auch ?menuvon utilsfür eine einfache Textbasis-Menüoberfläche und Eingabeaufforderung, die auch in verwendet wird devtools.

Hier ist ein Beispiel:

> menu(c("Yes", "No"), title="Do you want this?")
Do you want this? 

1: Yes
2: No

Selection:

7

Da diese Frage von den Toten zurückgebracht wurde, wird wahrscheinlich eine aktualisierte Antwort geschrieben.

Wenn eine grafische Benutzeroberfläche in diesem Fall überhaupt hilfreich ist, ist das Shiny-Paket jetzt gut in RStudio integriert, und es wäre sehr einfach, dies als Shiny-Anwendung zu implementieren. Auf der Website http://shiny.rstudio.com finden Sie weitere Informationen, einschließlich Beispiele und Dokumentation.


5

Für diesen speziellen Fall mag es übertrieben sein, aber das swirlPaket ist gut geeignet, um Anfängern R interaktiv vorzustellen.

swirl ist ein Softwarepaket für die Programmiersprache R, das die R-Konsole in eine interaktive Lernumgebung verwandelt. Benutzer erhalten sofortiges Feedback, wenn sie durch Lektionen in Data Science und R-Programmierung im eigenen Tempo geführt werden.

Die Anweisungen zum Generieren von Inhalten finden Sie hier: http://swirlstats.com/instructors.html .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.