最初我创建了这个闪亮的界面,其中包含参数“公司ID”和“日期”,但这里我们遇到了一个问题:大多数人都不知道我们与他们合作的公司,只有他们的名字,即(麦当劳) , 窝棚电台)。
所以我想理想地创建一个像这样的搜索功能
我目前的想法是将包含所有合作伙伴公司及其ID的列表的表格传递给global.R。然后将textInput作为搜索变量传入,并在服务器端执行搜索。但是,我迷失了如何将searchResults传递回selectInput面板上的UI?
我目前的代码:
ui.R
library(shiny)
shinyUI(pageWithSidebar(
sidebarPanel(
textInput("nameSearch", "Or, Search for company name", 'McDonald'),
selectInput("partnerName", "Select your choice", list( "searchResults" ),
br(),
submitButton("Update View"),
br(),
),
server.R
shinyServer(function(input, output) {
#subTable
searchResult<- reactive({
subset(partners, grepl(input$nameSearch, partners$name))
})
output$searchResults <- renderTable({
searchResult[,1]
})
global.R
partners<- read.csv("partnersList.csv", fill=TRUE)
partnersList就是这种格式
name id
------------------
McDonalds 1
Wendy's 2
Bestbuy 3
答案 0 :(得分:30)
您需要让UI处于反应状态。我没有测试过这个(也没有测试数据),但我认为应该可行。在server.R
添加:
output$selectUI <- renderUI({
selectInput("partnerName", "Select your choice", searchResult()[,1] ),
})
在ui.R
中将selectInput替换为:
htmlOutput("selectUI")
答案 1 :(得分:7)
在Shiny版本0.8(我测试过它)中,在server.R
中添加以下内容:
shinyServer(function(input, output, session) {
observe({
# This will change the value of input$partnerName to searchResult()[,1]
updateTextInput(session, "partnerName",
label = "Select your choice",
value = searchResult()[,1])
})
})
现在shinyServer
中的函数有另外的参数session
。
如果您不需要更改标签,可以跳过标签。
您无需更改ui.R
中的任何内容。
答案 2 :(得分:3)
Rstudio的JC回复:
当然,只需使用textInput作为搜索字符串,然后使用 renderUI / uiOutput使动态selectInput。然后剩下的 您的代码可能取决于selectInput的值。 (一定要检查 读取selectInput值时为NULL或其他什么,因为它 将从没有价值开始。)
答案 3 :(得分:0)