Я работаю в блестящем приложении, чтобы составить отчет о тренировках.
Мои упрощенные данные и код:
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
Может кто подскажет, где я ошибаюсь? Это проблема с использованием даты реагирования?
Спасибо