2013-04-23 48 views
29

Ban đầu tôi tạo giao diện sáng bóng này có tham số "id công ty" và "ngày", nhưng ở đây chúng tôi gặp sự cố: hầu hết mọi người đều không biết công ty chúng tôi làm việc với id của họ tên, tức là (McDonalds, Radioshack).Thay đổi tương tác lựa chọn SelectInput

Vì vậy, tôi muốn lý tưởng tạo ra một chức năng tìm kiếm như thế này enter image description here

ý tưởng hiện tại của tôi là phải vượt qua trong một bảng bao gồm một danh sách của tất cả các công ty đối tác của chúng tôi và id của họ để global.R. Sau đó chuyển vào textInput như các biến tìm kiếm và thực hiện tìm kiếm ở phía máy chủ. Tuy nhiên, tôi bị lạc về cách chuyển các kết quả tìm kiếm trở lại giao diện người dùng trên bảng điều khiển selectInput?

mã hiện tại của tôi:

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 chỉ là ở định dạng này

name   id 
------------------ 
    McDonalds  1 
    Wendy's   2 
    Bestbuy   3 

Trả lời

29

Bạn cần làm cho giao diện người dùng hoạt động trở lại. Tôi đã không thử nghiệm này (bỏ lỡ dữ liệu cho nó quá) nhưng nên làm việc tôi nghĩ. Trong server.R add:

output$selectUI <- renderUI({ 
selectInput("partnerName", "Select your choice", searchResult()[,1]), 
}) 

Và trong ui.R thay thế selectInput với:

htmlOutput("selectUI") 
+0

Tôi đã thành công với điều này. Đây là một cách thay thế mà tôi chưa thử: https://groups.google.com/forum/?fromgroups=#!topic/shiny-discuss/JGJx5A3Ge-A – GSee

+0

cảm ơn Sacha đã làm việc cho tôi. GSee: rằng sự phát triển mới sẽ thật tuyệt vời !! –

+1

Điều này không hoạt động trong R Markdown. Bất kỳ ý tưởng về cách làm điều này trong R Markdown? – NewNameStat

3

Trả lời từ JC Rstudio của:

Chắc chắn, chỉ cần sử dụng một textinput cho chuỗi tìm kiếm, và sử dụng renderUI/uiOutput để tạo selectInput động. Sau đó, phần còn lại của mã của bạn có thể phụ thuộc vào giá trị của selectInput. (Hãy chắc chắn để kiểm tra cho NULL hoặc bất cứ điều gì khi đọc giá trị selectInput, bởi vì nó sẽ bắt đầu ra không có giá trị.)

6

Trong phiên bản Shiny 0.8 (nơi tôi đã thử nghiệm nó), trong server.R thêm như sau :

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]) 
    }) 

}) 

Hiện tại, chức năng trong shinyServer có đối số bổ sung session.

Bạn có thể bỏ qua nhãn nếu bạn không cần thay đổi nhãn.

Bạn không cần thay đổi bất cứ điều gì trong ui.R.

Các vấn đề liên quan