gpt4 book ai didi

r - 在 Shiny 中,使用用户输入的新值更新 DataTable

转载 作者:行者123 更新时间:2023-12-02 01:56:13 26 4
gpt4 key购买 nike

我正在编写一个 Shiny 的应用程序,它有一个表(使用DT::renderDataTable),用户可以从中选择一行。但我希望用户也能够添加新行(如果他们想要的内容尚未在表中)。我正在使用输入控件供用户输入新数据,并且我有一个操作按钮,如果按下该按钮,应该根据输入值在表中创建一行新数据。但按下按钮不会更新表格。

一个最小的例子:

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 和代码以更新 renderUI 内的 mydata 的各种组合,observereactive,但我找不到正确的方法来执行此操作。

这是我的第一个 Shiny 的应用程序,所以也许有一个我不太掌握的基本概念。正确的做法是什么?

最佳答案

您可以渲染 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)
}

关于r - 在 Shiny 中,使用用户输入的新值更新 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40811903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com