[英]R Shiny using a list of input names into observeEvent
我生成了一个具有可变数量输入(具有变量名称)的 UI。 如何使用这些输入的名称作为一次性参数进入observe()
或observeEvent()
?
library(shiny)
library(plotly)
df1<-data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100),ID1=c("A","B"),ID2=(c("A","B","C","D")))
# Define UI for application that draws a histogram
ui<-fluidPage(
fluidRow(
sidebarPanel(
selectInput("select1","Select the ID",choices = colnames(df1[,4:5]),multiple = FALSE),
# actionButton("act1","Go"),
uiOutput("myui"),
# keep track of the last selection on all selectInput created dynamically
),
mainPanel(
#tableOutput("table1"),
plotlyOutput("plot.3d",height = "1000px")
)
)
)
# Define server logic required to draw a histogram
server<-function(input,output){
rv <- reactiveValues(mygroup = 0, uitaglist = list(), uilabels = list())
observeEvent(input$select1, {
newgroup <- unique(df1[,input$select1])
rv$mygroup <- newgroup
# ui tags
rv$uitaglist <- list()
for(i in 1:length(rv$mygroup)){
rv$uitaglist[[i]]<-colourpicker::colourInput(
inputId = paste0("ColorID",i),
label = rv$mygroup[i])
rv$uilabels[[i]] <- paste0("ColorID",i)
}
# print(rv$uilabels)
# print(names(input))
})
output$myui <- renderUI({
rv$uitaglist
})
# observeEvent(input[rv$uilabels], { #Error in [: Can't index reactivevalues with `[`
# print(input[[rv$uilabels[[1]]]])
# })
# observeEvent(rv$uilabels, { # no effect
# print(input[[rv$uilabels[[1]]]])
# })
# observe({ # no effect
# rv$uilabels
# print(rv$uilabels)
# })
} # end server
# Run the application
shinyApp(ui = ui, server = server)
事实证明,这可以通过以下方式完成:
observe({
rv$input_subset <- lapply(rv$uilabels, function(x) input[[x]])
print(rv$input_subset)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.