Chcę użyć reaktywnej ramki danych do wyświetlenia wielu wykresów i wykresów. Mam zestaw danych, który chciałbym móc filtrować. Te znalazłem odpowiednie ustawienia filtra, chciałbym pokazać dane na wielu różnych działkach - które zaktualizują się, jeśli ustawienia filtra zostaną zmienione.Jak zbudować reaktywną ramkę danych w R/Shiny?
To może wyjaśniać, co próbuję zrobić:
UI:
fluidPage(
sidebarLayout(
sidebarPanel(
checkboxGroupInput("checkGroups",
label = "Include", choices = list("1 star" = 1, "2 star" = 2,
"3 star" = 3, "4 star" = 4,
"5 star" = 5),
selected = list(1, 2, 3, 4, 5)),
checkboxInput("checkbox", "Include Replies"),
actionButton("Button", "Update")
),
mainPanel(
showOutput("plot", "nvd3"),
showOutput("pieplot", "nvd3")
)
)
)
SERVER:
rating <- c(2, 3, 5, 4, 1, 5, 3, 1, 4)
date_time <- c("2015-05-14", "2015-05-07", "2015-05-06", "2015-04-11", "2015-01-07", "2014-12-06", "2014-04-11", "2014-01-07", "2013-12-06")
repliesOnly <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE)
data <- data.frame(rating, date_time, repliesOnly)
function(input, output, session) {
load("data.Rdata")
newdata <- reactive({
filter_data <- data
filter_data <- filter_data %>% filter(rating %in% input$checkGroups)
filter_data <- filter_data %>% filter(repliesOnly %in% input$checkbox)
return(filter_data)
})
output$plot <- renderChart({
plot <- nPlot(rating ~ date_time, data = newdata,
type = "multiBarHorizontalChart", dom = 'plot')
return(plot)
})
output$pieplot <- renderChart({
pieplot <- nPlot(rating ~ date_time, data = newdata,
type = "pieChart", dom = 'pieplot')
return(pieplot)
})
}
można to zrobić? Oczywiście mogę po prostu dołączyć filtr dla każdego wykresu, ale mój zbiór danych jest dość duży, a mój filtr jest dość złożony, więc jeśli powinien obliczyć to dla każdego wykresu, to trwa to wiecznie.
Cała pomoc jest głęboko doceniona!
Skąd czerpiesz funkcję 'showOuput'? Przed opublikowaniem upewnij się, że Twój przykład jest powtarzalny. – nrussell
Wygląda na to, że wystarczy dodać coś w rodzaju 'dat <- newdata()' w komendach renderowania danych wyjściowych i użyć 'dat' w komendach wydruku. – jenesaisquoi
właściwie myślę, że po prostu możesz dodać '()' po 'newdata', jak to napisałeś, po prostu musisz wywołać' newdata'. – jenesaisquoi