Сумма значений с предыдущей недели на основе текущей недели в r блестящем приложении - PullRequest
0 голосов
/ 09 мая 2020

Я работаю в блестящем приложении, чтобы составить отчет о тренировках.

Мои упрощенные данные и код:

library(tidyverse)
library(shiny)
library(shinythemes)
library(dplyr)
library(readr)
library(data.table)
library(formattable)
library(rsconnect)



Data<- structure(list(WeekEnding = c("2020-03-08", "2020-03-15", "2020-03-22", 
                                     "2020-03-29", "2020-04-05", "2020-04-12", "2020-04-19", "2020-04-26"
), TotalTraining.hrs = c(14.119574637, 15.560762437, 14.160377084, 
                         16.968056203, 14.617250934, 10.865982397, 14.619121779, 13.135129677
)), row.names = c(NA, 8L), class = c("grouped_df", "tbl_df", 
                                     "tbl", "data.frame"))
Data$WeekEnding <- as.Date(Data$WeekEnding)

ui <- (fluidPage(
    titlePanel("Training Report"), 
    sidebarPanel(
        selectInput("dateInput", "Week Ending", choices = max(Data$WeekEnding))), 
        mainPanel(
            h3("Results"), 
            formattableOutput("results"), 
            h3("Test"), 
            formattableOutput("test"))))



    server <- (function(input, output){

        output$results <- renderFormattable({
            Table <- data.table(
                "Variable" = c("Total Training (hrs)"), 
                "Last Week" = c(sum(Data$TotalTraining.hrs[Data$WeekEnding == input$dateInput])),
                "Change" = c(
                    (sum(Data$TotalTraining.hrs[Data$WeekEnding == input$dateInput]) - 
                         sum(Data$TotalTraining.hrs[Data$WeekEnding == (input$dateInput)-7]))))


            formattable(Table, align= c("l", "c", "c"), 
                        list(Change = formatter("span", 
                                                   style = x ~ style(font.weight = "bold", 
                                                                     color = ifelse(x > 0, "green", ifelse(x < 0, "red", "black"))), 
                                                   x ~ icontext(ifelse(x>0, "arrow-up", ifelse(x<0, "arrow-down", "")), x))))


        })


    output$test <- renderFormattable({
        Test<- data.table(
            "Variable" = c("Total Training (hrs)"), 
            "Last Week" = c(sum(Data$TotalTraining.hrs[Data$WeekEnding == max(Data$WeekEnding)])),
            "Change" = c(
                (sum(Data$TotalTraining.hrs[Data$WeekEnding == max(Data$WeekEnding)]) - 
                     sum(Data$TotalTraining.hrs[Data$WeekEnding == max(Data$WeekEnding)-7]))))


        formattable(Test, align= c("l", "c", "c"), 
                    list(Change = formatter("span", 
                                            style = x ~ style(font.weight = "bold", 
                                                              color = ifelse(x > 0, "green", ifelse(x < 0, "red", "black"))), 
                                            x ~ icontext(ifelse(x>0, "arrow-up", ifelse(x<0, "arrow-down", "")), x))))

    })
})


    shinyApp(ui = ui, server = server)

Код для Table - это код, который я хотел бы использовать, где значения таблицы реагируют на дату ввода. Я хотел бы, чтобы в выводе таблицы отображалось значение TotalTraining.hrs для текущей даты (например, dateInput), а затем изменение с предыдущей недели (например, (dateInput) - 7). Я знаю, что проблема в этой части кода Data$WeekEnding == (input$dateInput)-7, потому что, когда я использую Data$WeekEnding == max(Data$WeekEnding)-7, как вы увидите в выводе Test, он работает нормально. Когда я запускаю код, вывод для Table производит ошибка:

Warning: Error in -: non-numeric argument to binary operator
  97: data.table
  95: func
  82: origRenderFunc
  81: output$results
   1: runApp

Может кто подскажет, где я ошибаюсь? Это проблема с использованием даты реагирования?

Спасибо

...