У меня есть приложение Shiny Dashboard с тремя пользовательскими интерфейсами.Первый пользовательский интерфейс является выбранным входом.Второй пользовательский интерфейс представляет собой вход динамического выбора, который зависит от значения первого входа выбора.Третий пользовательский интерфейс представляет собой вход динамического ползунка, который зависит от значения первых двух входов выбора.
Моя проблема в том, что все 3 интерфейса работают для создания результирующего графика.Тем не менее, перед созданием графика, есть короткий момент, когда RStudio выдвигает мне следующее предупреждение:
Предупреждение: ошибка в as.POSIXlt.default: не знаю, как конвертировать«х» в классе «POSIXlt»
Я бы хотел решить вышеуказанную проблему.Мне удалось выделить проблему в подразделе renderUI
и sliderInput
моего кода:
min = min (year (first_filter () $ Date)), max = max (year (first_filter () $)Дата)),
Функция year
из пакета lubridate
вернет числовое значение, которое, в свою очередь, будет передано в функции between
и filter
в моем канале dplyr.Это должен быть правильный тип данных, но R указывает на неправильный тип данных.
Заранее спасибо!
Мой код выглядит следующим образом:
Образецданные:
df <- structure(list(Date = structure(c(1546214400, 1538265600, 1530316800,
1522454400, 1514678400, 1506729600, 1498780800, 1490918400, 1483142400,
1475193600, 1546214400, 1538265600, 1530316800, 1522454400, 1514678400,
1506729600, 1498780800, 1490918400, 1483142400, 1475193600, 1546214400,
1538265600, 1530316800, 1522454400, 1514678400, 1506729600, 1498780800,
1490918400, 1483142400, 1475193600, 1546214400, 1538265600, 1530316800,
1522454400, 1514678400, 1506729600, 1498780800, 1490918400, 1483142400,
1475193600, 1467244800, 1459382400, 1451520000, 1443571200, 1435622400,
1427760000, 1419984000, 1412035200, 1404086400, 1396224000, 1546214400,
1538265600, 1530316800, 1522454400, 1514678400, 1506729600, 1498780800,
1490918400, 1483142400, 1475193600, 1467244800, 1459382400, 1451520000,
1443571200, 1435622400, 1427760000, 1419984000, 1412035200, 1404086400,
1396224000), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
Group = c("Group B", "Group B", "Group B", "Group B", "Group B",
"Group B", "Group B", "Group B", "Group B", "Group B", "Group B",
"Group B", "Group B", "Group B", "Group B", "Group B", "Group B",
"Group B", "Group B", "Group B", "Group B", "Group B", "Group B",
"Group B", "Group B", "Group B", "Group B", "Group B", "Group B",
"Group B", "Group A", "Group A", "Group A", "Group A", "Group A",
"Group A", "Group A", "Group A", "Group A", "Group A", "Group A",
"Group A", "Group A", "Group A", "Group A", "Group A", "Group A",
"Group A", "Group A", "Group A", "Group A", "Group A", "Group A",
"Group A", "Group A", "Group A", "Group A", "Group A", "Group A",
"Group A", "Group A", "Group A", "Group A", "Group A", "Group A",
"Group A", "Group A", "Group A", "Group A", "Group A"), Subgroup = c("Subgroup A",
"Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A",
"Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A", "Subgroup B",
"Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B",
"Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B", "Subgroup C",
"Subgroup C", "Subgroup C", "Subgroup C", "Subgroup C", "Subgroup C",
"Subgroup C", "Subgroup C", "Subgroup C", "Subgroup C", "Subgroup A",
"Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A",
"Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A",
"Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A",
"Subgroup A", "Subgroup A", "Subgroup A", "Subgroup A", "Subgroup B",
"Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B",
"Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B",
"Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B",
"Subgroup B", "Subgroup B", "Subgroup B", "Subgroup B"),
Value = c(4.3, 4.4, 4.4, 4.5, 5.3, 5.4, 5.4, 5.4, 5.4, 5.44,
31.5, 30.7, 29.5, 28.9, 29.2, 29.2, 29.2, 28.6, 27.6, 28.1,
99.2, 99.2, 99.2, 100, 100, 100, 100, 98.3, 100, NA, 3.5,
3.5, 3.5, 3.4, 3.5, 3.5, 3.4, 3.4, 3.6, 3.4, 3.53, 3.56,
3.45, 3.16, 2.74, 2.88, 2.81, 2.57, 2.59, 2.47, 39.3, 41.4,
40.3, 40.5, 37.3, 36.9, 36.4, 36.2, 39.8, 40.8, 40.2, 40.5,
40.1, 33.9, 37.9, 38.6, 38.3, 39.8, 39.5, 40.8)), row.names = c(NA,
-70L), class = c("tbl_df", "tbl", "data.frame"))
df$Date <- as.Date(df$Date, format = "%d/%m/%Y")
Пользовательский интерфейс:
# Define UI for application
ui <- dashboardPage(
# Application title
dashboardHeader(title = "App"),
# Dashboard Sidebar
dashboardSidebar(
sidebarMenu(
menuItem("Data", tabName = "data_tab")
)
),
dashboardBody(
tabItems(
tabItem(tabName = "data_tab",
fluidRow(
box(
selectInput("Group_selector",
"Select Group",
choices = unique(df$Group)),
# Add a UI Output to select Subgroup and Date range
uiOutput("dyn_metric"),
uiOutput("dyn_slider")
),
box(
# Produce output using plotly
plotlyOutput("plot")
)
)
)
)
)
)
Сервер:
library(shiny)
library(shinydashboard)
library(dplyr)
library(plotly)
library(lubridate)
# Define server logic required to plot trend
server <- function(input, output) {
# Render a UI for selecting of Subgroup metric
output$dyn_metric <- renderUI({
selectInput("Subgroup_selector",
"Select Subgroup", choices = unique(df[df$Group == input$Group_selector, "Subgroup"]))
})
# Render a UI for selecting date range
output$dyn_slider <- renderUI({
sliderInput("date_range_selector", "Select Date Range",
min = min(year(first_filter()$Date)),
max = max(year(first_filter()$Date)),
value = c(max(year(first_filter()$Date)-1),
max(year(first_filter()$Date))),
sep = "")
})
# Filter by Group and Subgroup first
first_filter <- reactive({
if(is.null(input$Subgroup_selector)) {
return(NULL)
}
df %>%
filter(Group == input$Group_selector & Subgroup == input$Subgroup_selector)
})
# Filter by Date Range next
second_filter <- reactive({
if(is.null(input$date_range_selector)) {
return(NULL)
}
first_filter() %>%
filter(between(year(Date), input$date_range_selector[1], input$date_range_selector[2]))
})
# Render plot using second filtered dataset
output$plot <- renderPlotly({
if(is.null(second_filter())) {
return()
}
plot_ly(second_filter(), x = ~Date, y = ~Value, type = "scatter", mode = "lines+markers")
})
}
# Run the application
shinyApp(ui = ui, server = server)