【发布时间】:2021-11-16 02:35:33
【问题描述】:
在运行下面的几乎 MWE 代码时,当侧边栏第二个矩阵输入面板被隐藏并且用户通过单击“Rates”操作按钮查看主面板中的值表时,我希望随后单击侧边栏面板中的“显示”操作按钮,除了显示第二个矩阵输入网格的主要作用外,还触发主面板中“绘图”的重新渲染(单选按钮自动切换到“绘图”) .另请参阅下图。
当单击“显示”actionButton 时,我将如何合并此“转到”逻辑?我在条件面板中玩弄 if/else 语句,但还没有运气。
我删除了几个折磨人的插值/输入验证函数(matrixValidate、vectorMulti、vectorMultiFinal)以使这个应用程序完全正常运行,因为它们令人困惑且与问题无关。但是,此发布表单中的应用程序确实可以在主面板中呈现虚拟绘图/表格并说明手头的问题。
MWE 代码:
library(shiny)
library(shinyMatrix)
library(shinyjs)
matrix5Default <- function(){vectorBase(60,0.05)}
matrix4Input <- function(x){
matrixInput(x,
value = matrix(c(0.05), 1, 1, dimnames = list(c("Base rate"),NULL)),
label = "Pre-vector rates (Y variables):",
rows = list(extend = FALSE, names = TRUE),
cols = list(extend = FALSE, names = FALSE, editableNames = FALSE),
class = "numeric")}
matrix5Input <- function(x,y,z){
matrixInput(x,
value = matrix(c(y,z),1,2,dimnames=list(NULL,c("X","Y"))),
rows = list(extend = TRUE, names = FALSE),
cols = list(extend = FALSE, names = TRUE, editableNames = FALSE),
class = "numeric")}
vectorBase <- function(x,y){
a <- rep(y,x)
b <- seq(1:x)
c <- data.frame(x = b, y = a)
return(c)}
ui <-
pageWithSidebar(
headerPanel("Model"),
sidebarPanel(uiOutput("Panels")),
mainPanel(
tabsetPanel(
tabPanel("Rates", value=2,
fluidRow(
radioButtons(
inputId = 'Tab2',
label = h5(strong(helpText("Outputs:"))),
choices = c('Plot','Rates'),
selected = 'Plot',
inline = TRUE)),
conditionalPanel(condition = "input.Tab2 == 'Plot'",plotOutput("plot1")),
conditionalPanel(condition = "input.Tab2 == 'Rates'",tableOutput("table1")),
), # close tab panel
id = "tabselected"
)
)
)
server <- function(input,output,session)({
periods <- reactive(input$periods)
base <- reactive(input$base)
ratesInput <- reactive(input$ratesInput)
output$Panels <- renderUI({
tagList(
conditionalPanel(
useShinyjs(),
condition="input.tabselected==2",
matrix4Input("base"),
uiOutput("ratesTotal"),
helpText("Generate rates vectors:"),
actionButton('showBtn','Show'),actionButton('hideBtn','Hide'),
hidden(uiOutput("ratesVectors")),
))
})
output$ratesVectors <- renderUI({matrix5Input("ratesInput",input$periods,input$base[1,1])})
observeEvent(input$showBtn,{shinyjs::show("ratesVectors")})
observeEvent(input$hideBtn,{shinyjs::hide("ratesVectors")})
output$plot1 <-renderPlot({plot(matrix5Default())})
output$table1 <- renderTable({matrix5Default()})
})
shinyApp(ui, server)
【问题讨论】:
-
再一次,你的应用很难消化。告诉我们哪些内容不适用于您当前的代码会有所帮助。你说“删除它们并让这个应用程序仍然工作需要很多时间。;有时我需要 2 个小时来回复一个闪亮的问题(有时我会赚到0 票,而我为一个明显的 R 问题获得 3 票,但这是另一个故事....)。
-
好的,我删除了大部分与手头问题无关的功能。该应用程序不会插入 matrix5 输入,也不会运行验证检查,但这些函数对于解决问题不是必需的。
标签: r shiny conditional-statements shiny-reactivity