#r #function #shiny #shinydashboard #reactive
#r #функция #блестящий #shinydashboard #реактивный
Вопрос:
У меня есть valuebox на блестящей панели инструментов, он обновляется с помощью функции ReactivePoll. Это значение получено из SQL-запроса.
Мне нужно сохранять каждое значение при его обновлении (это происходит, когда в базе данных появляется новая запись), я сохраню эти значения в векторе. Следовательно, этот вектор будет увеличиваться в длину каждый раз, когда у нас появляется новое значение в поле значений.
Наконец, я хочу создать символ строки с этим вектором.
Какую блестящую функцию я должен использовать?
Спасибо!
Ответ №1:
Конечно. Мы можем хранить значения в векторе в a reactiveValues
, поэтому мы можем обновлять и получать к нему доступ отовсюду.
Добавление к вектору так же просто, как myvector <- c(myvector, mynewvalue)
.
Ниже приведен минимальный рабочий пример. Он показывает добавление значений к вектору и отображение этого вектора в ячейках значений и графике. Для простоты мы пропустим часть reactivePoll.
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
valueBoxOutput("myvaluebox_latest"),
valueBoxOutput("myvaluebox_all"),
numericInput("mynumericinput", "Enter a Value", min = 1, max = 10, value = 5),
actionButton("myactionbutton", label = "Add to Value to Vector"),
plotOutput("myplot")
)
)
server <- function(input, output, session) {
#Create a reactive to store our vector
myreactives <- reactiveValues(
myvector = NULL
)
#Runs when the button is pressed
observeEvent(input$myactionbutton, {
#Add the selected value to our vector
myreactives$myvector <- c(myreactives$myvector, input$mynumericinput)
})
#Generate the valuebox for the latest data, runs when the vector changes
output$myvaluebox_latest <- renderValueBox(
valueBox(value = tail(myreactives$myvector, 1), subtitle = "Latest Value"),
)
#Generate the valuebox for the all the data, runs when the vector changes
output$myvaluebox_all <- renderValueBox(
valueBox(value = paste(myreactives$myvector, collapse = " "), subtitle = "All Values")
)
#Generate the plot
output$myplot <- renderPlot({
#Don't draw the plot when there is no data in the vector yet
req(myreactives$myvector)
plot(myreactives$myvector, type = "l")
})
}
shinyApp(ui, server)
Комментарии:
1. значение mi ValueBox — это реактивное выражение, которое просто выполняет SQL-запрос, когда в базе данных появляется новая запись. Могу ли я использовать observeEvent?