我遇到以下问题:根据条件面板的顺序(实际上是条件),不更新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
}
})
})