2017-06-20 23 views
1

我在Shiny R中有一個應用程序。在ui.R我讀取了Textinput,在global.R我使用sqldf()處理查詢。如何讀取ui.R中的TextInput,在global.R中處理具有此值的查詢並使用Shiny在服務器中顯示

如何在Global.R中讀取ui.R的Textinput?

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') 
) 
) 

這爲textInput名稱爲 「descritor」,我想在查詢中使用的global.R

我嘗試這樣做:

output$desc <- renderText({ 

    paste(input$descritor)}) 

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

但我做不到在global.R上閱讀「descritor」。

+1

在全局中沒有定義輸入/輸出對象。你需要這個服務器功能。您可以將參數從輸入傳遞到全局函數,但不能直接從'input'中讀取。最好有一個更完整的[可重現的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),它也顯示你的服務器代碼。 – MrFlick

回答

0

文件global.R不是Shiny應用程序的被動部分的一部分。只有在用戶界面和服務器功能中定義的組件纔可以作爲被動表達式。 global.R中的所有內容都在應用程序啓動時執行一次,但現在不再有了。

所以,如果你想擁有你的SQL語句進行,你需要你的服務器中執行以下操作:

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

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

通過使您的SQL語句的反應式(功能reactive()確實是),它會得到更新每更新一次output$desc。這種反應式表達的行爲就像一個函數(!)。所以在下一個語句中調用sql()將返回更新的SQL語句。然後,您可以使用您選擇的功能(我稱之爲someSQLfunction)來處理該語句。

你想讓這個語句的結果也是一個反應表達式,所以你可以使用它來創建你的應用程序的相關輸出。

+0

如果我提交給你,你能幫我組織我的代碼嗎? –

+0

@RobsonBrandão對不起,但我確實有足夠多的工作。爲了更好地理解如何在被動環境中組織代碼,請閱讀有關「反應式編程」的文章:http://shiny.rstudio.com/articles/當您瞭解基本原理時,組織代碼變得最好。 –

相關問題