这是一个玩具程序,可以做你想做的 - 我想。
它使用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)
产生:
谢谢!也许我对我的用例还不够清楚:让我再试一次。有一个固定的大名单的所有部件名称。任何特定的用户可能想要从这个列表中选择(说)两个或三个(或某些数量)的小部件。一旦他这样做了,我想生成一组匹配的输入框,允许他输入他选择的那些特定的两个或三个小部件名称的数量。我认为你的解决方案不这样做,对吧? –