無法識別動態創建selectInputs我創建了一個簡單的項目中,我生成從在一個模塊(選擇器)的列表選擇輸入返回輸入列表。我有另一個模塊(查看器),它接受從選擇器模塊返回的輸入,並生成與Count selectInput值相對應的多個textOutput,其文本對應於Colors selectInput值。 問題是生成的輸入未被識別,因此未被輸入列表挑選返回。我可以讓他們識別的唯一方法是,如果我對我不想做的selectInputs進行硬編碼(我已經將它們添加到了selectorUI中作爲參考的註釋)。在服務器
ui.R
library(shiny)
HOME_DIR<-getwd()
source(file.path(HOME_DIR,'subUI.R'),local=TRUE)
shinyUI(fluidPage(
titlePanel("Sample App"),
sidebarLayout(
sidebarPanel(
selectorUI("selectorModl")
),
mainPanel(
viewerUI("viewerModl")
)
)))
server.R
library(shiny)
HOME_DIR<-getwd()
source(file.path(HOME_DIR,'subUI.R'),local=TRUE)
shinyServer(function(input, output) {
selection <- list("count" = c(1,2,3,4,5), "colors" = c("blue", "green","red"))
inputValues<-reactive(callModule(selector,"selectorModl", selection))
observeEvent(inputValues(),{
if(length(inputValues()))
callModule(viewer, "viewerModl", inputValues())
})
})
subUI.R
#----------selector subUI
selectorUI<-function(id){
ns <- NS(id)
tagList(
htmlOutput(ns("selectorPane"))
# selectInput(ns("count"), label = "count", choices = "", multiple = F)
# ,selectInput(ns("colors"), label = "colors",choices = "", multiple = F)
)
}
selector<-function(input, output, session,selection){
output$selectorPane <- renderUI({
lapply(1:length(selection), function(selIdx){
selName <- names(selection)[selIdx]
selChoices<-selection[[selName]]
selectInput(inputId = selName, label = selName, choices = selChoices, multiple = F)
})
})
observe({
print(names(input))
if(!is.null(input[["count"]])){
if(input[["count"]]==""){
lapply(1:length(selection), function(selIdx){
selName <- names(selection)[selIdx]
selChoices<-selection[[selName]]
updateSelectInput(session, inputId = selName, choices = selChoices)
})
}
}
})
return(input)
}
#----------viewer subUI
viewerUI<-function(id){
ns <- NS(id)
uiOutput(ns("viewerPane"))
}
viewer<-function(input, output, session, inputValues){
output$viewerPane <- renderUI({
if(length(inputValues) > 0)
if(!is.null(inputValues[["count"]]) && inputValues[["count"]] != "" && !is.null(inputValues[["colors"]]))
lapply(1:inputValues[["count"]], function(idx){
textInput(paste("text",idx, sep = "_"), label = "", value = inputValues[["colors"]])
})
})
}
這裏是想什麼,我來實現屏幕截圖。任何幫助,將不勝感激。謝謝!
這正是我所需要的。優秀作品!關於命名被動函數和變量,你肯定是正確的。謝謝! – Josiah