点击事件更新多个窗口小部件(发光)

时间:2019-03-02 04:22:05

标签: r shiny shiny-reactivity

我是相对较新的R用户,我具有以下代码:(如下所示)。我目前已在示例本身中定义了数据框,但将来,我想从数据库中读取它们。我已经使用TestOutput函数显示了Risk的3个输出值,并且在服务器端,我已经从第一个数据帧(sc.risk.df)中读取了这些值。单击“更新”操作按钮后,我想将值更改为从第二个数据帧(sc.risk.df_New)读取的值。因此,我通过将输出语句放入ObserveEvent函数(基本上是重复代码)中来处理此问题。我确信有更好的方法来解决此问题,但我无法弄清楚。谁能告诉我如何最好地处理这种情况,即需要单击“更新”按钮来更新多个UI元素?提前致谢!干杯!

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)


#sample dataframe but will be read from DB
sc.risk.df <- data.frame(
  Category = c("High_Risk", "Medium_Risk", "Low_Risk"),
  Values = c(80, 300, 400)
)
#sample dataframe but will be read from DB 
sc.risk.df_New <- data.frame(
  Category = c("High_Risk", "Medium_Risk", "Low_Risk"),
  Values = c(100, 410, 500)
)

# ui function
ui <- fluidPage(

  actionButton("update", label = "Update"),

  column(width = 12,
         box(
           solidHeader = FALSE,
           title = "Status Summary",
           background = NULL,
           width = 12,
           status = "primary",
           footer = fluidRow(
             column(
               width = 4,
               descriptionBlock(

                 number_color = "green",
                 number_icon = "fa fa-refresh",
                 header = textOutput("test1_2"),
                 text = "High Risk",
                 right_border = TRUE,
                 margin_bottom = TRUE
               )
             ),
             column(
               width = 4,
               descriptionBlock(

                 number_color = "green",
                 number_icon = "fa fa-refresh",
                 header = textOutput("test2_2"),
                 text = "Medium Risk",
                 right_border = TRUE,
                 margin_bottom = TRUE
               )
             ),
             column(
               width = 4,
               descriptionBlock(

                 number_color = "orange",
                 number_icon = "fa fa-refresh",
                 header = textOutput("test3_2"),
                 text = "Low Risk",
                 right_border = TRUE,
                 margin_bottom = TRUE
               )
             )
           )
         ))

  )



# server function
server <- function(input, output, session) {

   output$test1_2 = renderText({
     a <- sc.risk.df[1,2]
   })    

   output$test2_2 = renderText({
     a <- sc.risk.df[2,2]
   }) 

   output$test3_2 = renderText({
     a <- sc.risk.df[3,2]
   }) 

   observeEvent(input$update,
                {
                  output$test1_2 = renderText({
                    a <- sc.risk.df_New[1,2]
                  })
                  output$test2_2 = renderText({
                    a <- sc.risk.df_New[2,2]
                  })  
                  output$test3_2 = renderText({
                    a <- sc.risk.df_New[3,2]
                  })  

                }
   )

}

shinyApp(ui = ui, server = server)

0 个答案:

没有答案