让两个renderui数字输入相互反应闪亮

时间:2016-11-15 07:50:49

标签: filter shiny

我尝试创建两个renderUI过滤器,这两个过滤器的值相互依赖。我有两个过滤器:百分比和价值。 百分比应为:value/total_amount,值应为total_amount*percentage。我需要这个,因为有时用户想要填写它想要的数字,有时它想要总数的百分比。我总是想要展示两者。 例如,如果用户在百分比过滤器中填写.20,我想在值过滤器中显示20。如果用户在值过滤器中填写80,我想在百分比过滤器中显示.8。  所以我希望这两个可以合并。我尝试这个代码,但它显然不起作用。

server <- function(input, output) {

  total_amount<-100


  output$percentage<-renderUI({

   myvalue<- input$value/total_amount
   if(is.null(myvalue))myvalue<-.2
    # myvalue<-.2
   #browser()
    numericInput('percentage','percentage',value = myvalue)
  })

  output$value<-renderUI({

    myvalue<- input$percentage*total_amount
    if(is.null(myvalue))myvalue<-100
    # myvalue<-100
    numericInput('value','value',value = myvalue)
   })

}

  ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput('percentage'),
      uiOutput('value')

    )
    # ,mainPanel(plotOutput("distPlot"))
  )
)

  shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

只需添加百分比的默认值,并确保窗口小部件具有值。

library(shiny)

server <- function(input, output) {

  total_amount <- 100
  percentage <- 0.2

  output$percentage <- renderUI({
    if(is.null(input$value)) {
      myvalue <- percentage
    } else {
      myvalue <- input$value/total_amount
    }  
    numericInput('percentage', 'percentage', value = myvalue)
  })

  output$value <- renderUI({
    if(is.null(input$percentage)) {
      myvalue <- percentage*total_amount
    } else {
      myvalue <- input$percentage*total_amount
    }
    numericInput('value', 'value', value = myvalue)
   })

}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput('percentage'),
      uiOutput('value')

    )
    ,mainPanel()
  )
)

shinyApp(ui = ui, server = server)