2015-01-11 15 views
5

Sto riscontrando qualche problema nel filtrare un set di dati reattivo che dipende da diversi input numerici. C'è un modo per aggirare disponibile? Ho fornito un codice simile sotto il quale replica il compito che sto cercando di raggiungere.Set di dati reattivi per il filtraggio in lucido R

ui.R 
library(shiny) 
shinyUI(fluidPage(
    titlePanel("abc"), 
    sidebarLayout(
    sidebarPanel(
     numericInput("first", "A",0), 
     numericInput("second", "B",0), 
     numericInput("third", "C",0), 
     numericInput("fourth", "D",0), 
     numericInput("fifth", "E",0), 
     actionButton("mybutton","Submit") 
    ), 
    mainPanel(
     tableOutput("mytable") 
    ) 
) 
)) 



server.R 

library(data.table) 
library(shiny) 
library(stats) 
shinyServer(function(input, output) { 
    a<-c("A","B","C","D","E","F","G") 
    b<-c("10","20","30","40","50","60","70") 
    ab<-data.frame(a,b) 
    a<-c("A","B","C","D","E") 
    input_vector<-reactive({ 
    c(input$first,input$second,input$third,input$fourth,input$fifth) 
    }) 
    newdata<-reactive({ 
    data.frame(a,input_vector()) 
    }) 
    merged_data<-reactive({ 
    merge(newdata(),ab,by.newdata=a) 
    }) 
    mutated_data<-reactive({ 
    library(dplyr) 
    merged_data%>%              #using merged()%>% gives error "Warning in Ops.factor(function() : ‘*’ not meaningful for factors" 
     mutate(newvalue=input_vector*b)         #using merged%>% gives error "no applicable method for 'mutate_' applied to an object of class "reactive" 
    }) 
    output$mytable<-renderTable({ 
    input$mybutton 
    isolate(mutated_data()) 
    }) 

}) 

risposta

9

penso che questo è ciò che si vuole:

library(data.table) 
library(shiny) 
library(stats) 

shinyServer(function(input, output) { 
    a<-c("A","B","C","D","E","F","G") 
    #b<-c("10","20","30","40","50","60","70") 
    b<-c(10,20,30,40,50,60,70) 
    ab<-data.frame(a,b) 
    a<-c("A","B","C","D","E") 

    input_vector<-reactive({ 
    c(input$first,input$second,input$third,input$fourth,input$fifth) 
    }) 
    newdata<-reactive({ 
    data.frame(a,input_vector()) 
    }) 
    merged_data<-reactive({ 
    merge(newdata(),ab,by.newdata=a) 
    }) 
    mutated_data<-reactive({ 
    library(dplyr) 
    mutate(merged_data(),newvalue=input_vector()*b)      
    }) 

    output$mytable<-renderTable({ 
    input$mybutton 
    isolate(mutated_data()) 
    }) 


}) 

enter image description here

+0

Grazie Mike. Questo è stato davvero molto utile. Proprio quello che volevo. –

+0

Non sembra che l''isolare (...)' attorno a 'mutated_data()' abbia qualche effetto ...? – d8aninja

+1

Sì, ha un grande effetto. Ovvero impedisce l'aggiornamento dell'output a destra immediatamente quando si aggiornano i valori A, B, C, D, E. Altrimenti non sarebbe necessario un pulsante di invio. Un altro modo per farlo sarebbe usare 'eventReactive' che eviterebbe l'isolamento. –