如何在 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 获取值?