#r #graph #shiny
#r #График #блестящий
Вопрос:
Я пытаюсь создать графическое приложение, используя R shiny. Поэтому я принимаю от пользователя входные данные для маршрута, идентификатора остановки / поездки (посадка, высадка или загрузка). Таким образом, ui.r является
ui <- fluidPage(
pageWithSidebar(
headerPanel('FAST_TRIPS Visulization', windowTitle = "Fast_trips Visaualization"),
sidebarPanel(
selectInput('route', 'Choose the Route No.', unique(y['route_id'])),
selectInput('id', 'Please Choose Stop or Trip ID', c('stop_id','trip_id')),
selectInput('rider', 'What do you wanna compare?', c('boarding', 'alighting', 'load')),
radioButtons('method','Please select your method', c('Sum', 'Average'))),
mainPanel(
plotOutput('plot1')
)
)
)
Затем я пытаюсь извлечь данные для конкретного маршрута и агрегированные значения, например, для посадки с помощью stop_id, и пытаюсь создать диаграмму для этих stop_id. Сервер.R находится ниже
server <- function(input, output, session) {
# Combine the selected variables into a new data frame
selectedData <- reactive({
y[c('route_id', input$id, input$rider)]
})
data <- reactive({
subset(selectedData, route_id == input$route)
})
a <- reactive({
aggregate(input$rider~input$id,data,input$method)
})
s <- reactive({input$rider})
output$plot1 <- renderPlot({barplot(a[s])})
}
Но я получаю следующую ошибку:
Error: object of type 'closure' is not subsettable
Пожалуйста, помогите мне с этим. Я новичок в shiny.
Ответ №1:
Вы должны получить доступ к реактивному выражению как к функции, поэтому вам нужно добавлять ()
к любому вызову переменной, созданной как реактивное выражение.
Вместо:
subset(selectedData, route_id == input$route)
попробуйте использовать:
subset(selectedData(), route_id == input$route)
или даже используйте дополнительную переменную, чтобы избежать проблем.
selectedData_ <- selectedData()
subset(selectedData_, route_id == input$route)
Наконец, вам не нужно вставлять единицу input
в реактивное выражение, просто используйте его в любом другом реактивном выражении как renderPlot
.
Вместо
s <- reactive({input$rider})
output$plot1 <- renderPlot({barplot(a[s])})
Использовать только
output$plot1 <- renderPlot({
a_ <- a()
barplot(a_[input$rider])
})
Пожалуйста, обратите внимание, что, поскольку вы не предоставили никаких репрезентативных данных для y
, я не смог полностью протестировать ваш код, но этот ответ должен устранить ошибку закрытия.