Ich habe eine funktionierende glänzende Anwendung, aber ich ändere sie so, dass die Eingabedaten reaktiv sind - sie wird aktualisiert, wenn die zugrunde liegenden Daten aktualisiert werden. Es funktionierte gut, als es nur die Daten einlud, aber jetzt, da die Daten reaktiv sind, habe ich Probleme mit einer der Dateien (zwei andere funktionieren wie erwartet). Die Datei ist eine .csv, die aus einer Datenbank exportiert wird, und ich möchte vor der Verwendung ein wenig Hauswirtschaft machen - einige Namen ändern und einige Daten formatieren. Der relevante Teil ist:
%Vor%Das funktioniert gut, aber die nächsten zwei Zeilen funktionieren nicht:
%Vor%Wenn ich das mache, bekomme ich
%Vor% und ähnlich für die andere Zeile. Was geht hier vor sich? Kann ich diese Art von Dingen mit einem data.frame
machen, das von reactiveFileInput
gelesen wird? Ich habe versucht, die Namen in der zugrunde liegenden CSV-Datei zu Unterstrichen statt Leerzeichen zu ändern, und ich habe versucht, die names()
und as.Date()
in reactive()
Ausdrücke, aber diese machten keinen Unterschied.
Danke
Ich antworte auf meine eigene Frage weitgehend, um zu sagen, dass ich ein Nomperat sei. Sobald die Datei mit reactiveFileReader()
eingelesen wurde, wird sie zu einer "reaktiven Quelle". Wie im glänzenden Tutorial hier erklärt, werden die reaktiven Quellen von außen modifiziert - ein Benutzer gibt einen neuen Wert ein oder in diesem Fall eine Aktualisierung der Datei. Sie können es nicht innerhalb von server.r
ändern.
Also, für meinen Fall habe ich die Optionen col.names
und colClasses
in read.csv()
verwendet, um die Originaldaten im bestmöglichen Format zu erhalten. Ich habe auch die sehr nützliche Funktion setAs
verwendet, um read.csv
zu erhalten, um zu verstehen, wie man das Datum formatiert, wie hier erklärt: Geben Sie das Datumsformat für das Argument colClasses ... an.
Von da an mussten alle neuen Spalten, die ich aus den Daten erstellen musste, als separates Objekt mit einer reaktiven Funktion wie dieser ausgeführt werden:
%Vor% Und dann kann NewThing()
wiederum verwendet werden, wie Sie es wünschen. Auf diese Weise können Sie Probleme wie Zeichenwerte in einer ansonsten numerischen Spalte umgehen. Wenn Sie versuchen, es mit colClasses="numeric"
einzubinden, erhalten Sie einen Fehler und der read.csv()
wird fehlschlagen. Stattdessen importieren Sie die Spalte zuerst als "Zeichen" und verwenden dann reactive({})
mit as.numeric()
, um sie einem neuen Objekt zuzuordnen. Beachten Sie, dass das neue Objekt keine neue Spalte in data.frame
sein kann, die Sie mit reactiveFileReader()
eingefügt haben. Stattdessen muss es ein neues Objekt sein, das von dieser data.frame
abhängt.