Ich schreibe eine glänzende App, die eine Tabelle hat (mit DT::renderDataTable
), aus denen Benutzer eine Zeile auswählen können. Aber ich möchte, dass der Benutzer auch neue Zeilen hinzufügen kann, wenn das, was er will, nicht bereits in der Tabelle ist. Ich verwende Eingabesteuerelemente, damit der Benutzer neue Daten eingeben kann, und ich habe eine Aktionsschaltfläche, die, wenn sie gedrückt wird, eine neue Datenzeile in der Tabelle aus den Eingabewerten erstellen soll. Durch Drücken der Schaltfläche wird die Tabelle jedoch nicht aktualisiert.In Shiny, Update DataTable mit neuen Werten von Benutzereingabe
Ein minimales Beispiel:
library(shiny)
library(DT)
mydata = data.frame(id=letters[1:5], val=sample(10,5,T))
ui = fluidPage(dataTableOutput("table"),
textInput('NewID', 'Enter new ID'),
numericInput('NewVal', 'Enter new val', 1),
actionButton("goButton", "Update Table"))
server = function(input,output){
output$table = renderDataTable(mydata)
update = eventReactive(input$goButton, {
newrow = data.frame(id = input$NewID, val = input$NewVal)
mydata = rbind(mydata, newrow)
})
}
shinyApp(ui,server)
Offensichtlich ist dies der falsche Weg, dies zu nähern. Ich habe verschiedene Kombinationen der Verpackung sowohl renderDataTable
und den Code zur Aktualisierung mydata
innerhalb renderUI
, observe
und reactive
versucht, aber ich kann nicht den richtigen Weg finden, dies zu tun.
Dies ist meine erste glänzende App, also vielleicht gibt es ein Grundkonzept, das ich nicht ganz verstehe. Was ist der richtige Weg?
'Fehler in Kraft (Standard): Argument„Wert“fehlt, ohne default' – HubertL
@HubertL Sie diese Fehlermeldung erhalten, wenn Paste und den Code ausführen? Es läuft ok für mich. – dww
Ich muss den 'value' Parameter für' numericInput() ' – HubertL