2017-06-20 1 views
1

Ich habe eine Anwendung in Shiny R. Auf ui.R Ich lese ein Textinput, Auf global.R Ich verarbeite eine Abfrage mit sqldf().Wie liest man einen TextInput in ui.R, verarbeitet eine Abfrage mit diesem Wert in global.R und zeigt in Server.R mit Shiny

Wie kann ich einen Textinput von ui.R in Global.R lesen?

ui.R

shinyUI(fluidPage(

    #books <<- list("Descritores FOUSP" = "descritor"), 

    # Application title 
    titlePanel("CRAI"), 

    headerPanel(title="Pesquisa de Descritores"), 
    sidebarLayout(
    sidebarPanel(

     h5('Qual é o tema da sua pesquisa ?'), 
     textInput("descritor", "Digite um descritor",""), 
     submitButton('Pesquisar') 
) 
) 

Dieser textinput mit dem Namen "descritor", möchte ich auf global.R in Abfrage verwenden

ich dieses versucht:

output$desc <- renderText({ 

    paste(input$descritor)}) 

sql <- sprintf("SELECT * FROM csv WHERE Assuntos = '%s'", output$desc) 

Aber ich kann '' Beschreiber 'auf global.R zu lesen.

+1

Es sind keine 'Eingabe/Ausgabe'-Objekte in global definiert. Sie brauchen dazu die Serverfunktion. Sie können Parameter von Ihrer Eingabe an Ihre globale Funktion übergeben, aber Sie können nicht direkt von 'Eingabe' lesen. Es wäre besser, ein vollständigeres [reproduzierbares Beispiel] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) zu haben, das auch Ihren Servercode anzeigt. – MrFlick

Antwort

0

Die Datei global.R gehört nicht zum reaktiven Bereich einer Shiny-App. Nur Komponenten, die in einer Benutzerschnittstelle und einer Serverfunktion definiert sind, können als reaktive Ausdrücke fungieren. Alles in global.R erfolgt einmalig beim Start der App, dann aber nicht mehr.

Also, wenn Sie Ihre SQL-Anweisung ausgeführt haben wollen, müssen Sie folgendes in Ihrem Server:

sql <- reactive({ 
    sprintf("SELECT * FROM csv WHERE Assuntos = '%s'", output$desc) 
}) 

mydata <- reactive({ 
    someSQLfunction(sql()) 
}) 

von SQL-Anweisung einen reaktiven Ausdruck (Funktion reactive() das tut), wird es aktualisiert, bei jedem Update von output$desc. Dieser reaktive Ausdruck verhält sich wie eine Funktion (!). So wird der Aufruf sql() in der nächsten Anweisung die aktualisierte SQL-Anweisung zurückgeben. Sie können dann eine Funktion Ihrer Wahl verwenden (ich nenne es someSQLfunction), um die Anweisung zu verarbeiten.

Sie möchten das Ergebnis dieser Anweisung auch als reaktiven Ausdruck verwenden, damit Sie die relevante Ausgabe Ihrer App erstellen können.

+0

Können Sie mir helfen, meinen Code zu organisieren, wenn ich für Sie einreiche? –

+0

@ RobsonBrandão Es tut mir leid, aber ich habe mehr als genug Arbeit, wie es ist. Um zu verstehen, wie Sie Ihren Code in einem reaktiven Kontext organisieren, lesen Sie die Artikel über "Reaktive Programmierung" hier: http://shiny.rstudio.com/articles/ Organisieren von Code ist am besten, wenn Sie die zugrunde liegenden Prinzipien verstehen. –

Verwandte Themen