2016-12-27 16 views
1

固定ウィジェットセットからウィジェットを選択し、選択したウィジェットごとに数量を入力できるようにする必要があります。R-Shiny UIイディオム(数字選択のマルチセレクト入力用)

selectInput("widgets","Widgets",choices = widgets_list,multiple = TRUE) 

上記の複数選択ボックスでユーザーが選択した項目ごとに1つずつ数値入力ボックスを動的に表示するにはどうすればよいですか?

data.frame(widgets=c("Widget1","Widget2","Widget3"),quantities=c(23,34,23)) 

これを実装する最善の方法上の任意の考えを:

最終的に私のようないくつかの構造で終わるしたいですか?

答えて

1

ここでは、あなたが望むことをするおもちゃのプログラムです - 私は思います。

reactiveValuesを使用して、1組のベクトルを宣言し、それを反応的に変更することができます。基礎データの変更に合わせて新しい入力デバイスをレンダリングするには、renderUIuiOutputを使用します。また、renderDataTableを使用して、作成中のデータテーブルを表示します。

library(shiny)  
widgets_list = c("Widget1","Widget2","Widget3") 
widgets_quan = c(23,34,23) 
u <- shinyUI(fluidPage(
    titlePanel("Shiny Widgets Input"), 
    sidebarLayout(position = "left", 
      sidebarPanel(h3("sidebar panel"), 
         uiOutput("widgname"), 
         uiOutput("widgquan") 
         ), 
      mainPanel(h3("main panel"), 
        dataTableOutput("dataframe") 
        ) 
))) 
s <- shinyServer(function(input,output) { 

    rv <- reactiveValues(wname = widgets_list,wquan = widgets_quan) 

    observeEvent(input$widgquan, { 
     rv$wquan[ which(rv$wname==input$widget) ] <- input$widgquan 
    }) 
    output$widgname <- renderUI({ 
    selectInput("widget","Widget",choices = rv$wname) 
    }) 
    output$widgquan <- renderUI({ 
     req(input$widget) 
     n <- rv$wquan[which(rv$wname == input$widget)] 
     numericInput("widgquan","Quantity:",n) 
    }) 
    widgdata <- reactive({ 
    req(input$widgquan) 
    df <- data.frame(Widgets = rv$wname,Quantity = rv$wquan) 
    }) 
    output$dataframe <- renderDataTable({ widgdata() }) 
}) 
shinyApp(ui = u,server = s) 

得: enter image description here

+0

感謝を!たぶん、私のユースケースについてはっきりしていないかもしれません。もう一度試してみましょう。すべてのウィジェット名の固定リストがあります。特定のユーザは、このリストから2つまたは3つ(またはいくつかの数)のウィジェットを選択(言いたい)したいかもしれません。彼がそれをしたら、彼が選択した特定の2つまたは3つのウィジェット名の数量を入力することができる、一致する入力ボックスのセットを生成したい。私はあなたの解決策がそうはないと思いますよね? –

関連する問題