如何使用操作按钮在 R shiny 中显示和隐藏 table 输出?
How to use action buttons to show and hide table output in R shiny?
在下面的简单应用程序代码中,我在闪亮的模态对话框中生成了用户输入 table(或矩阵)。单击“修改”操作按钮会拉出默认用户输入 table,用户可以在其中修改默认值、insert/delete 输入列等。“显示”操作按钮会拉出 table2
主页,“隐藏”隐藏相同的 table。 (您可以忽略出现在模态框中的 table1
,它暂时存在用于测试目的,稍后将被删除)。 “重置”按钮将 table 恢复为默认值 table。
问题在于“显示”和“隐藏”只能使用一次。此外,在修改输入 table(或矩阵)后,单击“修改”将拉出默认 table 而不是最近修改的 table.
那么,我将如何修改下面的内容,以便 (i) 分别单击“显示”和“隐藏”来显示和隐藏最近修改的 table,重复(可以合并 Show/Hide 按钮,使用 shinyjs toggle
函数,这是我玩过的东西),(ii)第一次调用应用程序时单击“修改”会拉出默认值 table (就像目前一样)但随后单击“修改”会调出最近修改的 table,并且 (iii) 在未先修改 table 的情况下单击“显示”会调出默认值 table?
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)
我认为这应该涵盖所有不同的场景。
我用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)
在下面的简单应用程序代码中,我在闪亮的模态对话框中生成了用户输入 table(或矩阵)。单击“修改”操作按钮会拉出默认用户输入 table,用户可以在其中修改默认值、insert/delete 输入列等。“显示”操作按钮会拉出 table2
主页,“隐藏”隐藏相同的 table。 (您可以忽略出现在模态框中的 table1
,它暂时存在用于测试目的,稍后将被删除)。 “重置”按钮将 table 恢复为默认值 table。
问题在于“显示”和“隐藏”只能使用一次。此外,在修改输入 table(或矩阵)后,单击“修改”将拉出默认 table 而不是最近修改的 table.
那么,我将如何修改下面的内容,以便 (i) 分别单击“显示”和“隐藏”来显示和隐藏最近修改的 table,重复(可以合并 Show/Hide 按钮,使用 shinyjs toggle
函数,这是我玩过的东西),(ii)第一次调用应用程序时单击“修改”会拉出默认值 table (就像目前一样)但随后单击“修改”会调出最近修改的 table,并且 (iii) 在未先修改 table 的情况下单击“显示”会调出默认值 table?
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)
我认为这应该涵盖所有不同的场景。
我用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)