這是一個玩具程序,可以做你想做的 - 我想。
它使用reactiveValues
來聲明一對向量,然後您可以被動地改變。它使用renderUI
和uiOutput
隨着底層數據更改呈現新的輸入設備。它還使用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)
產生:
謝謝!也許我對我的用例還不夠清楚:讓我再試一次。有一個固定的大名單的所有部件名稱。任何特定的用戶可能想要從這個列表中選擇(說)兩個或三個(或某些數量)的小部件。一旦他這樣做了,我想生成一組匹配的輸入框,允許他輸入他選擇的那些特定的兩個或三個小部件名稱的數量。我認爲你的解決方案不這樣做,對吧? –