RShiny 中 renderDataTable 的 Sum 列并将结果存储在数据框中以备后用
Sum column of renderDataTable in RShiny and store results in dataframe for later use
不确定我是否采用了正确的方法,但我创建了一个按预期工作的 Shiny 应用程序。
它从源中获取数据并将其显示为图表,并在用户点击执行按钮时显示为 table。
下面的 reprex 代码。为简单起见删除了一些功能。
library(shiny)
ui <- fluidPage(
actionButton("exe", "Run",
style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
mainPanel(
DT::dataTableOutput("datatable"),
))
server <- function(input, output, session) {
ga_data <- eventReactive( input$exe, {
the_date <- as.Date(c('2020-03-01','2020-03-02','2020-03-03','2020-03-04','2020-03-05' ))
users <- c(346, 223, 167, 431, 293)
employ.data <- data.frame(the_date, users)
})
output$datatable <- DT::renderDataTable({
req(ga_data())
ga_data <- ga_data()
})
}
shinyApp(ui = ui, server = server)
然而,我真正想做的是取 'users' 列的总和,并将该单个值 (1460) 存储在它自己的变量或数据框中,以供以后在代码中使用(例如作为分母用于计算转化率)并让 table 对用户不可见。
感谢任何帮助。
当然,我们可以存储列 'users' 的总和,而不让 table 可见。请注意 <<-
的使用,确保该值在任何地方都可用,而不仅仅是在创建它的地方。
library(shiny)
ui <- fluidPage(
actionButton("exe", "Run", style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
mainPanel(plotOutput('myplot'))
)
server <- function(input, output, session) {
ga_data <- eventReactive(input$exe, {
the_date <- as.Date(c('2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04', '2020-03-05'))
users <- c(346, 223, 167, 431, 293)
employ.data <- data.frame(the_date, users)
#Store the sum of the column 'users' in a global variable, so we can use it anywhere later
employ.data.sum <<- sum(employ.data$users, na.rm = TRUE)
showNotification(paste("The sum of the column 'users' has been stored and is ready to use anywhere. Its", employ.data.sum))
employ.data
})
output$myplot <- renderPlot({
req(ga_data())
plot(employ.data)
})
}
shinyApp(ui = ui, server = server)
不确定我是否采用了正确的方法,但我创建了一个按预期工作的 Shiny 应用程序。 它从源中获取数据并将其显示为图表,并在用户点击执行按钮时显示为 table。
下面的 reprex 代码。为简单起见删除了一些功能。
library(shiny)
ui <- fluidPage(
actionButton("exe", "Run",
style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
mainPanel(
DT::dataTableOutput("datatable"),
))
server <- function(input, output, session) {
ga_data <- eventReactive( input$exe, {
the_date <- as.Date(c('2020-03-01','2020-03-02','2020-03-03','2020-03-04','2020-03-05' ))
users <- c(346, 223, 167, 431, 293)
employ.data <- data.frame(the_date, users)
})
output$datatable <- DT::renderDataTable({
req(ga_data())
ga_data <- ga_data()
})
}
shinyApp(ui = ui, server = server)
然而,我真正想做的是取 'users' 列的总和,并将该单个值 (1460) 存储在它自己的变量或数据框中,以供以后在代码中使用(例如作为分母用于计算转化率)并让 table 对用户不可见。
感谢任何帮助。
当然,我们可以存储列 'users' 的总和,而不让 table 可见。请注意 <<-
的使用,确保该值在任何地方都可用,而不仅仅是在创建它的地方。
library(shiny)
ui <- fluidPage(
actionButton("exe", "Run", style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
mainPanel(plotOutput('myplot'))
)
server <- function(input, output, session) {
ga_data <- eventReactive(input$exe, {
the_date <- as.Date(c('2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04', '2020-03-05'))
users <- c(346, 223, 167, 431, 293)
employ.data <- data.frame(the_date, users)
#Store the sum of the column 'users' in a global variable, so we can use it anywhere later
employ.data.sum <<- sum(employ.data$users, na.rm = TRUE)
showNotification(paste("The sum of the column 'users' has been stored and is ready to use anywhere. Its", employ.data.sum))
employ.data
})
output$myplot <- renderPlot({
req(ga_data())
plot(employ.data)
})
}
shinyApp(ui = ui, server = server)