如何在 ui.R 中读取 TextInput,在 global.R 中使用此值处理查询并使用 Shiny 在 server.R 中显示

How to read a TextInput in ui.R, process a query with this value in global.R and show in server.R using Shiny

我在 Shiny R 中有一个应用程序。在 ui.R 我读了一个文本输入,在 global.R我使用 sqldf().

处理查询

如何在 Global.R 中读取 ui.R 的文本输入?

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

这个名为 "descritor" 的文本输入,我想在 global.R

的查询中使用

我试过这个:

output$desc <- renderText({

    paste(input$descritor)})

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

但我无法在 global.R 上阅读 "descritor"。

文件 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() 将 return 更新后的 SQL 语句。然后您可以使用您选择的函数(我称之为 someSQLfunction)来处理语句。

您想使该语句的结果也成为反应式表达式,以便您可以使用它来创建应用的相关输出。