2014-11-21 6 views
7

Come si utilizzano i valori ottenuti da un elemento renderUI in un wrapper reattivo?R-Shiny utilizzando il valore di renderingUI reattivo

vale a dire Il mio codice:

CompanyNames <- sqlQuery(connection, "SELECT Companynm FROM RiskMgm_Company") 

output$CompNameSelector <- renderUI({ 
selectInput("compName","Company Name:",as.vector(CompanyNames[,1])) 
}) 

CompID <- reactive({ 
CompID <<- sqlQuery(paste("SELECT CompanyID FROM RiskMgm_Company WHERE Companynm = '",compName,"'")) 
}) 

output$MotorSelector <- renderUI({ 
selectInput("MachSer","Machine:",sqlQuery(connection,paste("SELECT Motor_func FROM RiskMgm_Motor WHERE Company_ID='",CompID,"'"))) 
}) 

mio errore:

Successfilly opened connection to db 
Error in paste("SELECT CompanyID FROM RiskMgm_Company WHERE Companynm = '", : 
could not find function "compName" 

Che cosa sto facendo di sbagliato? Essenzialmente quello che voglio è un elenco di aziende dato dalla query SQL. Poi a seconda della società selezionata mostrerà i motori che appartengono a tale società nella prossima casella a discesa

Grazie

risposta

7

Si dovrebbe fare riferimento agli elementi per la loro identificazione, per esempio input$compName. Come un esempio forzato qui è una semplice app lucida con due selectInput. Le seconde scelte selectInput dipendono dal valore del primo. Riferimento l'uscita di widget creato da renderUI non è diverso dal riferimento gli stessi widget se fossero stati in UI.R fin dall'inizio:

library(shiny) 
myDF <- data.frame(A = 1:4, B = 3:6, C = 6:9, D = 10:13) 
runApp(
    list(
    ui = fluidPage(
     uiOutput("myList"), 
     uiOutput("myNumbers") 
    ) 
    , server = function(input, output, session){ 
     output$myList <- renderUI({ 
     selectInput("compName", "Company Name:", LETTERS[1:4]) 
     }) 

     output$myNumbers <- renderUI({ 
     selectInput("compNo", "Product Line:", myDF[, input$compName]) 
     }) 
    } 
    ) 
) 
+0

Che ha fatto il trucco, grazie! –