2015-05-05 10 views
8

Sono nuovo di shiny ma chiedevo se c'è un modo per memorizzare una filtrati DataTable (utilizzando i filtri di colonna) in un oggetto R in modo che questi dati filtrati possono essere passati alle istogramma e funzioni di stampa.Utilizzando DataTable filtrati a lucido

EDIT 7 maggio 15: Compreso spiegazione ampliato dell'autore dai commenti

Voglio che il tavolo per ottenere filtrato utilizzando i filtri di colonna incorporate e poi vogliono che il complotto per regolare automaticamente. Ho già provato il pacchetto DT ma non mi piacciono molto i filtri di colonna che arrivano con questo pacchetto in quanto non è possibile (credo) rimuovere i filtri da un sottoinsieme delle colonne nella tabella

+1

la tua domanda non è ancora chiara. Vuoi che data.table venga filtrato usando alcuni input che l'utente sceglie (come un valore da un widget 'selectInput') e quindi la trama si aggiusta automaticamente? –

+1

se si utilizza il pacchetto 'DT', per rendere il vostro DataTable' input $ table_rows_all' contiene gli indici delle righe filtrate. C'è un esempio [qui] (https://yihui.shinyapps.io/DT-info/) – NicE

+0

Voglio che la tabella venga filtrata usando i filtri di colonna incorporati e poi desideri che il grafico si aggiusti automaticamente. Ho già provato il pacchetto DT ma non mi piacciono molto i filtri di colonna forniti con questo pacchetto in quanto non è possibile (credo) rimuovere i filtri da un sottoinsieme delle colonne nella tabella. – jperdigao

risposta

5

Basta costruire su di @ JasonAizkalns esempio, è possibile nascondere alcuni dei filtri colonna incorporati utilizzando jQuery. per esempio qui i primi due sono nascosti:

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

Grazie! Questo funziona perfettamente. – jperdigao

4

Il example suggerito da @NicE è molto utile. Sono compresi un esempio minimo sotto:

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"]) 
    }) 
    } 
) 

Questo genererà un istogramma Sepal.Length dai dati iris impostati per i dati filtrati nel DT::datatable.

Nota: Questo presuppone che le seguenti versioni di DT e shiny:

DT_0.0.39 shiny_0.11.1.9005