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

Posted

技术标签:

【中文标题】如何在 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 【发布时间】:2017-11-23 03:43:00 【问题描述】:

我在 Shiny R 中有一个应用程序。在 ui.R 上我读取了一个 Textinput,在 global.R 上我使用 sqldf()。

如何在 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')
)
)

这个名称为“描述符”的文本输入,我想在 global.R 上的查询中使用

我试过了:

output$desc <- renderText(

    paste(input$descritor))

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

但我无法在 global.R. 上阅读“描述符”

【问题讨论】:

全局中没有定义input/output 对象。为此,您需要服务器功能。您可以将输入中的参数传递给全局函数,但不能直接从input 读取。最好有一个更完整的reproducible example 来显示您的服务器代码。 【参考方案1】:

文件 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)来处理该语句。

您希望此语句的结果也是一个反应式表达式,以便您可以使用它来创建应用程序的相关输出。

【讨论】:

如果我为你提交,你能帮我整理一下我的代码吗? @RobsonBrandão 很抱歉,我确实有足够的工作量。要更好地了解如何在响应式上下文中组织代码,请在此处阅读有关“响应式编程”的文章:shiny.rstudio.com/articles 当您了解基本原则时,组织代码效果最好。

以上是关于如何在 ui.R 中读取 TextInput,在 global.R 中使用此值处理查询并使用 Shiny 在 server.R 中显示的主要内容,如果未能解决你的问题,请参考以下文章

React Native-在功能组件中首次加载/渲染屏幕时,如何使用从 AsyncStorage 读取的值启动 TextInput?

shinydashboard ui.R 和 server.R 未读取 Global.R

如何在 TextInput 组件中更改边框颜色“onChangeText”

如何在 React Native 中使用状态从 TextInput 获取值?

如何知道 TextInput 组件在 Flex 中是不是处于活动状态

如何在kivy python中添加标签,TextInput