我有一个选项,允许用户更改一些默认值(a12)。如果用户选择这样做并输入新值(a12 *),则将使用函数(fn1),否则将使用(a12)的默认值并使用函数(fn2)。问题出在后续运行中(仅更改了一年),即使用户不再更改值a *,也会使用fn1。 现在我希望能够将默认值更新为新值(a12 = a12 *),因此任何后续运行都将使用fn2。我已经尝试过reactiveValues和其他许多东西,但它不起作用。 我在下面做了一个简化的可重复的例子。
fn1<-function(year1, year2, a){
table<-data.frame(c(year1,year2,a))
plotout<-plot(hist(seq(year1:year2)))
return(list(table,plotout))
}
fn2<-function(year1, year2, a){
table<-data.frame(c(year1,year2,a^2))
plotout<-plot(density(seq(year1:year2)))
return(list(table,plotout))
}
ui <- fluidPage( fluidRow(
column(12,sliderInput(inputId="year1",
label="Enter a starting and ending year", value=c(2017,2019),
min=2017, max=2060,sep=""))),
fluidRow(column(3,numericInput("a12", label="a12 age<65",value=2))),
actionButton("update", "Update Table", icon("refresh"),
style="color: #fff; background-color: #337ab7"),
fluidRow(tableOutput("Table")),
fluidRow(plotOutput("plot"))
)
server <- function(input, output) {
p<-eventReactive(input$update,{
a12<-2
if(input$a12!=a12){
tab<-fn1(input$year1[1],input$year1[2],input$a12)
}else{
tab<- fn2(input$year1[1],input$year1[2],a12)
}
list(tab1=tab[[1]],tab2=tab[[2]])
}
)
output$Table<- renderTable({
return(p()$tab1) })
output$plot<-renderPlot({p()$tab2})
}
shinyApp(ui = ui, server = server)
由于