在Shiny中,使用用户输入中的新值更新DataTable
我正在写一个闪亮的应用程序,该应用程序有一个用户可以从中选择行的表(使用DT::renderDataTable
)。但是我希望用户也可以添加新的行,如果他们想要的东西不在表中。我为用户使用输入控件输入新数据,并且我有一个操作按钮,如果按下该按钮,应该从输入值在表中创建新的一行数据。但按下按钮不会更新表格。在Shiny中,使用用户输入中的新值更新DataTable
小例子:
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)
显然,这是接近这个错误的方式。我试过renderDataTable
和更新mydata
renderUI
,observe
和reactive
的代码,但我找不到正确的方法来做到这一点。
这是我的第一个闪亮的应用程序,所以也许有一个基本的概念,我不太明白。什么是正确的方式?
您可以渲染eventReactive
的结果,其中返回更新的数据集。不要忘了使用<<-
修改全局数据集,以及:
server = function(input,output){
output$table <- renderDataTable(df())
df <- eventReactive(input$goButton, {
if(input$NewID!="" && !is.null(input$NewVal) && input$goButton>0){
newrow = data.table(id = input$NewID,
val = input$NewVal)
mydata <<- rbind(mydata, newrow)
}
mydata
}, ignoreNULL = FALSE)
}
优秀!那几乎是那里。唯一的小问题是,在按钮被按下之前,它会添加一个带有空白标识的新行。你知道如何抑制? – dww
我添加了一个检查'输入$ goButton> 0'表示按钮已被点击 – HubertL
现在会抛出一个错误 – user5249203
'错误生效(默认):参数“价值”的缺失,没有default' – HubertL
@HubertL你得到这个错误时,粘贴和运行代码?它对我来说运行正常。 – dww
我需要为'numericInput()'提供'value'参数' – HubertL