2015-05-05 13 views
8

Tôi mới vào shiny nhưng đã tự hỏi nếu có cách nào để lưu trữ một lọc DataTable (sử dụng các bộ lọc cột) trong một đối tượng R để dữ liệu lọc này có thể được truyền cho histogramchức năng cốt truyện.Sử dụng datatables lọc trong bóng

EDIT 07 tháng 5, 15: Bao gồm lời giải thích mở rộng của tác giả từ bình luận

tôi muốn bàn để lọc sử dụng các bộ lọc cột built-in và sau đó muốn cốt truyện để tự động điều chỉnh. Tôi đã thử gói DT nhưng tôi không thích nhiều bộ lọc cột đến với gói này vì không thể (tôi nghĩ) để xóa bộ lọc khỏi tập hợp con của các cột trong bảng

+1

câu hỏi của bạn vẫn chưa rõ ràng. Bạn có muốn data.table được lọc bằng cách sử dụng một số đầu vào mà người dùng chọn (như một giá trị từ một widget 'selectInput') và sau đó cốt truyện của bạn tự động điều chỉnh không? –

+1

nếu bạn đang sử dụng gói 'DT', để hiển thị đầu vào DataTable' $ table_rows_all' giữ các chỉ mục của các hàng được lọc. Có một ví dụ [ở đây] (https://yihui.shinyapps.io/DT-info/) – NicE

+0

Tôi muốn bảng được lọc bằng cách sử dụng bộ lọc cột dựng sẵn và sau đó muốn cốt truyện tự động điều chỉnh. Tôi đã thử các gói DT nhưng tôi không thích rất nhiều các bộ lọc cột đi kèm với gói này vì nó là không thể (tôi nghĩ) để loại bỏ các bộ lọc từ một tập con của các cột trong bảng. – jperdigao

Trả lời

5

Chỉ cần xây dựng trên ví dụ @ JasonAizkalns, bạn có thể che giấu một số các bộ lọc cột built-in sử dụng jQuery. ví dụ ở đây hai trường hợp đầu tiên bị ẩn:

library(shiny) 
library(DT) 

shinyApp(
    ui = fluidPage(dataTableOutput('tbl'), 
       plotOutput('plot1')), 
    server = function(input, output) {  
    output$tbl = renderDataTable({ 
     datatable(iris, filter="top",options = list(lengthChange = FALSE),callback=JS(" 
      //hide column filters for the first two columns 
      $.each([0, 1], function(i, v) { 
       $('input.form-control').eq(v).hide() 
       });")) 
    }) 
    output$plot1 = renderPlot({ 
     filtered_data <- input$tbl_rows_all 
     hist(iris[filtered_data, "Sepal.Length"]) 
    }) 
    } 
) 
+0

Cảm ơn! Điều này hoạt động hoàn hảo. – jperdigao

4

example được đề xuất bởi @NicE rất hữu ích. Tôi kể một ví dụ tối thiểu dưới đây:

library(shiny) 
library(DT) 

shinyApp(
    ui = fluidPage(dataTableOutput('tbl'), 
       plotOutput('plot1')), 
    server = function(input, output) {  
    output$tbl = renderDataTable({ 
     datatable(iris, options = list(lengthChange = FALSE)) 
    }) 
    output$plot1 = renderPlot({ 
     filtered_data <- input$tbl_rows_all 
     hist(iris[filtered_data, "Sepal.Length"]) 
    }) 
    } 
) 

này sẽ tạo ra một biểu đồ của Sepal.Length từ iris tập dữ liệu cho dữ liệu đã lọc trong DT::datatable.

Lưu ý: Điều này giả định các phiên bản sau của DTshiny:

DT_0.0.39 shiny_0.11.1.9005

Các vấn đề liên quan