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)