在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?
Posted
技术标签:
【中文标题】在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?【英文标题】:In R Shiny, how do you reset data (reversing all manual inputs) in rhandsontable using an actionButton? 【发布时间】:2021-09-30 09:36:39 【问题描述】:在下面的 MWE 代码中,操作按钮“显示”触发了一个模式对话框,其中包含用户可以使用 rhandsontable 操作的表格。按预期工作,但“重置”按钮不起作用。重置应该将所有用户输入反转到表中,并带回一个 2 列、5 行的随机变量表。
如何重置表格?今天早上我一直在玩这个,但还没有运气。
这个需要顺便留在modalDialog!模式对话框中的 Rhandsontable 看起来很棘手,但对于这个具有许多输入的模型来说,它的功能非常强大。
查看底部的图片。第一张图片显示了首次调用应用程序并单击“显示”操作按钮时发生的情况。好 - 出现一个 5 行 2 列的表格。第二张图片是用户右键单击表格以在底部插入额外的行,在第 6 行的 x 和 y 列中输入 6 后显示的内容。如果您单击以“关闭”模式并再次单击“显示”,那么很好——按预期显示相同的修改表。反复单击 Dismiss/Show 会不断返回相同的修改后的 6 行表——好!但是如果你点击“重置”,第 6 行添加的修改表会不断返回。应该恢复为 5 行表。如果用户手动在表中输入了很多行,而不是像本例中那样只输入了一行,reset 应该会返回一个 5 行的表。
library(shiny)
library(rhandsontable)
ui <- fluidPage(actionButton("show","Show"),
actionButton("reset","Reset"))
server <- function(input, output, session)
dat <- reactiveVal(data.frame(x=runif(5),y=runif(5)))
dat1 <- reactive(
if(is.null(input$hot))dat()
else as.data.frame(hot_to_r(input$hot))
) # close reactive
observeEvent(input$show,showModal(modalDialog(rHandsontableOutput("hot"))))
observeEvent(input$reset,dat(data.frame(x=runif(5),y=runif(5))))
output$hot <- renderRHandsontable(rhandsontable(dat1()))
# close Server
shinyApp(ui,server)
下面是一张图片,显示了对它进行更改并点击“显示”按钮后被遮挡的表格(应该显示整个表格):
【问题讨论】:
【参考方案1】:您的状况if(is.null(input$hot))dat()
阻止了重置。
请检查以下内容:
library(shiny)
library(rhandsontable)
ui <- fluidPage(actionButton("show", "Show"),
actionButton("reset", "Reset"))
server <- function(input, output, session)
dat <- reactiveVal(data.frame(x = runif(5), y = runif(5)))
observeEvent(input$hot,
dat(as.data.frame(hot_to_r(input$hot)))
)
observeEvent(input$show,
showModal(modalDialog(rHandsontableOutput("hot")))
)
observeEvent(input$reset,
dat(data.frame(x = runif(5), y = runif(5)))
)
output$hot <- renderRHandsontable(
# input$show
rhandsontable(dat())
)
# close Server
shinyApp(ui, server)
【讨论】:
从技术上讲它是有效的。但是现在,当您在更改表格后单击“显示”时,模态对话框中只会出现表格的一部分。要使整个表格出现,您必须单击表格上的任意位置。有什么办法可以在不丢失表格的完整呈现的情况下解决这个问题? 我们可以通过单击show
后重新渲染表格来解决此问题。在您的示例中可以在短时间内看到相同的效果 - 可能是 rhandsontable
中的错误。请查看我的编辑。
但现在重置已停止工作。嗯...确实看起来有问题
是的 - 这里有些奇怪。你可能想file an issue。
链接到相关的 GitHub 问题:github.com/jrowen/rhandsontable/issues/387以上是关于在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ui.R 中读取 TextInput,在 global.R 中使用此值处理查询并使用 Shiny 在 server.R 中显示