R闪亮更新条件面板中的默认数值

时间:2017-10-14 17:55:21

标签: r shiny

我遇到以下问题:根据条件面板的顺序(实际上是条件),不更新numericInputs的默认值。我创建了一个最小的例子:
在tabPanel'回归'中,两个numericInputs的默认值应该根据用户对预配置的选择进行调整,预配置决定了潜在变量和清单变量的数量。不幸的是,只更新了一个值,另一个值采用了最初在numericInput中指定的默认值。为了说清楚我改变了ui.R.中条件的顺序 我猜测会发生什么:所有值都在服务器中更新并传递给ui。在这里他们也更新了。如果首先出现与预配置(变量数量)一致的条件,则更新变量数量,然后更新默认值。好。但是,如果第一个条件与预配置不一致,则可能首先更新默认值,然后更新变量数,以便再次显示原始默认值。或者实际发生了什么?我该如何解决这个问题?

    library(shiny)

shinyUI(fluidPage(
  sidebarLayout(
    sidebarPanel(
      radioButtons(inputId="conf", label="Chose preconfiguration", 
                   choices=c("preconfigA"="preconf_A", 
                             "preconfigB"="preconf_B", 
                             "Standard"="standard")),
      tabsetPanel(
        tabPanel("Independent Variables",
                 # number of latent covariates
                 fluidRow(column(5, p("Number of latent covariates")),
                          column(4, numericInput("n_l_cov", label=NULL, value=1,
                                                 min = 0, max = 2, width='60%'))),
                 # number of manifest covariates
                 fluidRow(column(5, p("Number of manifest covariates")),
                          column(4, numericInput("n_m_cov", label=NULL, value=1,
                                                 min = 0, max = 2, width='60%')))),
        tabPanel('Regression',
                 ####
                 h5("Here the conditional Panel with 1 manifest and 1 latent covariate comes first"),
                 conditionalPanel(
                   condition = "input.n_m_cov == 1 & input.n_l_cov == 1",
                   numericInput(inputId="gamma000", label="\u03B3_000", value=0.2, width='100%')
                 ),
                 conditionalPanel(
                   condition = "input.n_m_cov == 0 & input.n_l_cov == 2",
                   numericInput(inputId="gamma000", label="\u03B3_000", value=0.2, width='100%')
                 ),
                 ####
                 h5("Now the first conditional Panel is with 0 manifest and 2 latent covariates"),
                 conditionalPanel(
                   condition = "input.n_m_cov == 0 & input.n_l_cov == 2",
                   numericInput(inputId="gamma100", label="\u03B3_100", value=0.2, width='100%')
                 ),
                 conditionalPanel(
                   condition = "input.n_m_cov == 1 & input.n_l_cov == 1",
                   numericInput(inputId="gamma100", label="\u03B3_100", value=0.2, width='100%')
                 )

      )
    )
  ),
  mainPanel()
)
)  
)


shinyServer(
 function(input, output, session){
  observe({
  c <- input$conf
  print(c)

  if(c=="preconf_A"){
    # set number of manifest covariate to 1
    updateNumericInput(session, inputId="n_m_cov", value=1)
    # set number of latent covariate to 1
    updateNumericInput(session, inputId="n_l_cov", value=1)
    updateNumericInput(session, inputId="gamma000", value=66)
    updateNumericInput(session, inputId="gamma100", value=66)

  }else if(c=="preconf_B"){
    # set number of manifest covariates to 0
    updateNumericInput(session, inputId="n_m_cov", value=0)
    # set number of latent covariate to 1
    updateNumericInput(session, inputId="n_l_cov", value=2)
    updateNumericInput(session, inputId="gamma000", value=5000)
    updateNumericInput(session, inputId="gamma100", value=5000)
  }else{
    NULL
  }
})
})

0 个答案:

没有答案