2015-05-25 43 views
8

Tôi muốn sử dụng khung dữ liệu phản hồi để hiển thị nhiều ô và đồ thị. Tôi có một tập dữ liệu mà tôi muốn có thể lọc. Tôi đã tìm thấy cài đặt bộ lọc phù hợp, tôi muốn hiển thị dữ liệu trên một số ô khác nhau - sẽ cập nhật nếu cài đặt bộ lọc bị thay đổi.Làm cách nào để xây dựng một khung dữ liệu phản hồi trong R/Shiny?

Điều này có thể giải thích, những gì tôi đang cố gắng để làm:

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) 

    }) 

} 

Nó có thể được thực hiện? Tất nhiên tôi chỉ có thể bao gồm các bộ lọc cho mỗi đồ thị-đầu ra, nhưng số liệu của tôi là khá lớn và bộ lọc của tôi là khá phức tạp, vì vậy nếu nó nên tính toán nó cho mỗi đồ thị nó mất mãi mãi.

Tất cả trợ giúp đều được đánh giá cao!

+0

Bạn nhận hàm 'showOuput' từ đâu? Hãy đảm bảo ví dụ của bạn có thể sao chép trước khi đăng. – nrussell

+3

Dường như tất cả những gì bạn phải làm là thêm một cái gì đó như 'dat <- newdata()' vào các lệnh kết xuất đầu ra của bạn và sử dụng 'dat' trong các lệnh cốt truyện của bạn. – jenesaisquoi

+4

thực sự tôi nghĩ rằng bạn chỉ có thể thêm '()' sau khi 'newdata' như bạn đã viết nó, bạn chỉ cần gọi' newdata'. – jenesaisquoi

Trả lời

6

Thanks for the help - đây làm việc:

SERVER:

library(shiny) 
library(rCharts) 

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) 
data$rating <- as.character(data$rating) 


function(input, output, session) { 

    load("data.Rdata") 

    datadata <- data 
    makeReactiveBinding("datadata") 

    newData <- reactive({ 

    input$Button 
    isolate({ 

     datadata <- data 

     datadata <- subset(datadata, rating %in% input$checkGroups) 


    }) 

    }) 

    output$plot <- renderChart({ 

    datadata <- newData() 

    plot <- nPlot(rating ~ date_time, data = datadata, 
        type = "multiBarHorizontalChart", dom = 'plot') 
    return(plot) 

    }) 

    output$pieplot <- renderChart({ 

    datadata <- newData() 

    pieplot <- nPlot(rating ~ date_time, data = datadata, 
        type = "pieChart", dom = 'pieplot') 
    return(pieplot) 

    }) 

} 
1

Cảm ơn bạn cho ví dụ này; Tôi cũng cần một bộ lọc khung dữ liệu phản ứng. Sau khi chiến đấu 2 giờ với lỗi sau:

cannot coerce class ""reactive"" to a data.frame 

bài đăng của bạn đã giúp tôi giải quyết vấn đề. Tôi dám đăng một phiên bản đơn giản của ví dụ của bạn, dễ dàng hơn để tái sản xuất (không có số showOutput hoặc readChart cuộc gọi), để tham khảo trong tương lai cho những người dùng sáng bóng khác.

N.B .: Tôi sử dụng ứng dụng một tệp.

library(shiny) 

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) 
data$rating <- as.character(data$rating) 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(

    checkboxGroupInput("checkGroups", 
        label = "Include", choices = c("1 star" = 1, 
                 "2 star" = 2, 
                 "3 star" = 3, 
                 "4 star" = 4, 
                 "5 star" = 5), 
        selected = list(1, 2, 3, 4, 5)) 
), 

mainPanel(
    tableOutput("view") 
    ) 
    ) 
    ) 

server <- function(input, output, session) { 
    newData <- reactive({ 
     data <- subset(data, rating %in% input$checkGroups) 
}) 

output$view <- renderTable({ newData() }) 

} 

shinyApp(ui = ui, server = server) 
Các vấn đề liên quan