单击Shiny中的操作按钮后显示更新的变量

时间:2017-04-05 14:02:58

标签: r shiny

我是新手,并尝试使用操作按钮完成一项简单的任务:

  • 用户点击按钮并调用一个函数
  • 此函数使用输入变量进行一些计算并更新/创建多个全局变量(reactiveValues,可能在observe块内?)
  • 我想在UI上显示这些值(使用render*函数)
  • 每当用户更改输入值时,UI都会自动更新

相关代码位是:

server.R

...
rv <- reactiveValues() 
observe({
 if(input$run){
  rv$a <- someFunc(input$aa)
 }
})
output$msg = renderText({ rv$a })
...

ui.R

...
selectInput("aa", ...)
...
actionButton("run", "Run")
...
textOutput("msg")

每次用户点击按钮时,如何根据输入msg更改aa

1 个答案:

答案 0 :(得分:2)

我不相信我明白你想要什么,但我想它是这样的:

library(shiny)
u <- fluidPage(
  titlePanel("Simple Selectable Reactive Function"),
    sidebarLayout(
      sidebarPanel(
        sliderInput("vv", "Choose a value",min=-3.14,max=3.14,value=0),
        selectInput("aa", "Choose a function", choices=c("sin","cos","exp")),
        actionButton("run", "Change Function and Run")
      ),
     mainPanel(
      h2("Results"),
      verbatimTextOutput("msg")
 )))
s <- function(input,output){

  rv <- reactiveValues(func=NULL) 

  observeEvent(input$run,{   rv$func <- input$aa })

  funcval <- reactive({
    v <- 0
    if (rv$func=="sin") v <- sin(input$vv)
    if (rv$func=="cos") v <- cos(input$vv)
    if (rv$func=="exp") v <- exp(input$vv)
    v
  })
  output$msg = renderPrint({
       if (is.null(rv$func)) return("not running")
       fv <- funcval()
       sprintf("%s(%.3f)=%.3f",rv$func,input$vv,fv)
    })
}
shinyApp(ui=u,server=s)

产生这个:

enter image description here

请注意,当最小值和最大值不均匀时,滑块输入值会非常严重地格式化其当前值。不确定一个人可以做些什么。