我是相对较新的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)