2013-04-23 22 views
29

Asıl olarak, "şirket kimliği" ve "tarih" parametrelerini alan bu parlak arabirimi oluşturuyorum, ancak burada bir sorunumuz var: çoğu kişi, birlikte çalıştığımız şirketleri kimlikleriyle tanımıyor. isim, yani (McDonalds, Radioshack). selectInput seçimlerini interaktif olarak değiştirin

yüzden ideal olarak Bulunduğum fikri tüm ortak şirketlerin listesi ve global.R onların kimlikleri içeren bir tabloda geçmektir bu enter image description here

gibi bir arama işlevi oluşturmak istiyorum. Ardından textInputta arama değişkenlerini girin ve sunucu tarafında arama yapın. Ancak, searchInults öğesini selectInput panelindeki kullanıcı arabirimine nasıl geçireceğimi kaybolacak mıyım?

Benim geçerli kod:

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 sadece bu formatta

yılında ise
name   id 
------------------ 
    McDonalds  1 
    Wendy's   2 
    Bestbuy   3 

cevap

29

Kullanıcı arayüzü reaktifini yapmanız gerekir. Bunu test etmedim (bunun için verileri özlüyorum) ama çalışmalıyım. server.R eklenti olarak:

htmlOutput("selectUI") 
+0

Bu konuda başarılı oldum. İşte denemediğim bir alternatif: https://groups.google.com/forum/?fromgroups=#!topic/shiny-discuss/JGJx5A3Ge-A – GSee

+0

teşekkürler Sacha bu benim için çalıştı. GSee: Bu yeni gelişme inanılmaz olacak! –

+1

Bu, R Markdown'da çalışmıyor. Bunu R Markdown'da nasıl yapacağınız hakkında bir fikrin var mı? – NewNameStat

3

Rstudio en JC Yanıt veren:

Tabii, sadece arama dizesi için bir textInput kullanın ve kullanım

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

Ve ui.R içinde olan selectInput yerine Dinamik bir selectInput yapmak için renderUI/uiOutput. Ardından kodunun geri kalanı, selectInput değerine bağlı olabilir. (SelectInput değerini okurken o hiçbir değeri ile başlar, çünkü NULL ya da her neyse kontrol etmek emin olun.)

6

(bunu test ettik) Parlak versiyonunda 0.8 yılında server.R aşağıdaki ekleyin :

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

}) 

Şimdi shinyServer içinde işlev ek argüman session sahiptir.

Değiştirmeniz gerekmiyorsa etiketi atlayabilirsiniz.

ui.R numaralı belgede herhangi bir şeyi değiştirmeniz gerekmez.

İlgili konular