如何使用操作按钮在 R Shiny 中显示和隐藏表格输出?
Posted
技术标签:
【中文标题】如何使用操作按钮在 R Shiny 中显示和隐藏表格输出?【英文标题】:How to use action buttons to show and hide table output in R shiny? 【发布时间】:2021-10-06 12:30:13 【问题描述】:在下面的简单 App 代码中,我在 Shiny 模态对话框中生成了一个用户输入表(或矩阵)。单击“修改”操作按钮会拉出一个默认用户输入表,用户可以在其中修改默认值、插入/删除输入列等。“显示”操作按钮在主页上拉出table2
,“隐藏”隐藏同一张桌子。 (您可以忽略模态框中出现的table1
,它暂时存在用于测试目的,稍后将被删除)。 “重置”按钮将表格恢复为默认表格。
问题是“显示”和“隐藏”只能工作一次。此外,在修改输入表(或矩阵)后,单击“修改”会拉出默认表,而不是最近修改的表。
那么,我将如何修改以下内容,以便(i)单击“显示”和“隐藏”分别重复显示和隐藏最近修改的表格(确定也有一个组合显示/隐藏按钮,使用 shinyjs @ 987654323@ 函数,我玩过的东西),(ii)在第一次调用应用程序时单击“修改”会拉出默认表(如当前所做的那样),但随后单击“修改”会拉出最近修改的表, 以及 (iii) 在没有先修改表格的情况下点击“显示”会拉出默认表格?
MWE 代码:
library(shiny)
library(shinyMatrix)
library(shinyjs)
matrix3Input <- function(x)
matrixInput(x,
label = 'Series terms:',
value = matrix(c(1,24,0,1),4,1,dimnames=list(c("A","B","C","D"),NULL)),
rows = list(extend = FALSE,names = TRUE),
cols = list(extend = TRUE,names = TRUE,editableNames = TRUE,delete = TRUE),
class = "numeric") # close matrix input
# close function
ui <- fluidPage(
useShinyjs(),
titlePanel("Inputs"),
fluidRow(actionButton("modify","Modify"),
actionButton("show","Show"),
actionButton("hide","Hide"),
actionButton("reset","Reset"),
tableOutput("table2")
) # close fluid row
) # close fluid page
server <- function(input, output, session)
observeEvent(input$modify,showModal(modalDialog(
matrix3Input("matrix"),
tableOutput("table1"))
))
output$table1 <- renderTable(input$matrix, rownames = TRUE)
observeEvent(input$show,
tableOutput("table2")
output$table2 <- renderTable(input$matrix, rownames = TRUE)
)
observeEvent(input$hide,hide("table2"))
observeEvent(input$reset,
tableOutput("table2")
output$table2 <- renderTable(input$matrix, rownames = TRUE)
)
# close server
shinyApp(ui, server)
【问题讨论】:
【参考方案1】:我认为这应该涵盖所有不同的场景。
我用reactiveValues
保存matrix3Input
和矩阵。
library(shiny)
library(shinyMatrix)
library(shinyjs)
default_mat <- matrix(c(1,24,0,1),4,1,dimnames=list(c("A","B","C","D"),NULL))
matrix3Input <- function(x, default_mat)
matrixInput(x,
label = 'Series terms:',
value = default_mat,
rows = list(extend = FALSE,names = TRUE),
cols = list(extend = TRUE,names = TRUE,editableNames = TRUE,delete = TRUE),
class = "numeric") # close matrix input
# close function
ui <- fluidPage(
useShinyjs(),
titlePanel("Inputs"),
fluidRow(actionButton("modify","Modify"),
actionButton("show","Show"),
actionButton("hide","Hide"),
actionButton("reset","Reset"),
tableOutput("table2")
) # close fluid row
) # close fluid page
server <- function(input, output, session)
rv <- reactiveValues(mat = matrix3Input("matrix", default_mat), input = default_mat)
hide("table2")
observeEvent(input$modify,
showModal(modalDialog(
rv$mat,
tableOutput("table1"))
)
hide("table2")
)
output$table1 <- renderTable(
rv$mat <- matrix3Input("matrix", input$matrix)
rv$input <- input$matrix
input$matrix
, rownames = TRUE)
observeEvent(input$show,
show("table2")
)
observeEvent(input$hide, hide("table2"))
observeEvent(input$reset,
hide("table2")
rv$input <- default_mat
rv$mat <- matrix3Input("matrix", default_mat)
)
output$table2 <- renderTable(
rv$input
, rownames = TRUE)
# close server
shinyApp(ui, server)
【讨论】:
您好 Ronak,当我运行您的代码时,当我单击“显示”按钮时,table2 没有出现。每次单击“显示”时,唯一发生的情况是在 R Studio 控制台中返回以下内容: Listening on 127.0.0.1:6025 [1] "table2" 刚刚再次检查了新的 R 会话。它对我来说很好,可以正确显示/隐藏/重置。不知道你最后可能出了什么问题。 是的,重启 R 就成功了。效果很好。我会研究你的修复。谢谢你罗纳克! 知道如何在更改 selectioninput 或 actionButton 后隐藏呈现的表格吗?以上是关于如何使用操作按钮在 R Shiny 中显示和隐藏表格输出?的主要内容,如果未能解决你的问题,请参考以下文章
在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?