Суммируйте столбец renderDataTable в RShiny и сохраняйте результаты в фрейме данных для последующего использования. - PullRequest
0 голосов
/ 17 марта 2020

Не уверен, что я выбрал правильный подход, но я создал приложение Shiny, которое работает как положено. Он берет данные из источника и представляет их в виде диаграммы, а также в виде таблицы, когда пользователь нажимает кнопку «Выполнить».

Код для представления ниже. Некоторая функциональность удалена для простоты.

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) в своей переменной или в фрейме данных для последующего использования. в коде (например, в качестве знаменателя для расчета коэффициента конверсии) и иметь таблицу НЕ видимой для пользователя.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 марта 2020

Конечно, мы можем хранить сумму столбца 'users' и не иметь видимой таблицы. Обратите внимание на использование <<-, которое гарантирует, что значение доступно где угодно, а не только в том месте, где оно было создано.

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)
...