我已经尝试了很多这样的组合无济于事,而且完全没有想法。
我有一个data.table,DT和一个闪亮的应用程序,其中两个selectInput都基于相同的闪亮模块。 第一个inputSelect应该基于第一列对我的data.table进行子集化,第二个inputSelect将根据第二列的值进一步获取剩余的子集和子集DT。
我发现第二个selectInput的选择不可能是第一个selectInput == col1的子集后第二列的值。
我在下方提供了该应用的示例代码。我正在制作的实际应用程序比这更复杂。一切正常,直到第二个selectInput。我在使第二个renderUI反应时遇到问题。 非常欣赏正确方向的一些提示。
library(data.table)
library(shiny)
myUI <- function(id) {
ns <- NS(id)
fluidRow(
uiOutput(ns('myFinalText'))
)
}
ui <- pageWithSidebar(headerPanel = headerPanel(title = "title"),
sidebarPanel = sidebarPanel(
myUI('menu1')
,
myUI('menu2')
),
mainPanel = mainPanel(actionButton("debug","INSPECT"))
)
set.seed(1)
DT <- data.table(col1 = LETTERS[rep(1:2, each = 3)] ,
col2 = LETTERS[sample(1:4, 6, replace = TRUE)],
num = 1:6,
key = c("col1", "col2"))
myTextFunc <- function(input, output, session, text) {
output$myFinalText <- renderUI({
if(text == "textArg1"){
selectInput(paste0(text,"Val"),"choose",choices = DT[,col1])
}else{
selectInput(paste0(text,"Val"),"choose",choices = DT[col1 == input$textArg1Val,col2])
}
})
}
server <- function(input, output, session) {
callModule(myTextFunc, 'menu1', session = session, 'textArg1')
callModule(myTextFunc, 'menu2', session = session, 'textArg2')
observeEvent(input$debug,
browser()
)
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
您可以手动添加一些反应数据
喜欢
myTextFunc <- function(input, output, session, text,data) {
output$myFinalText <- renderUI({
if(text == "textArg1"){
selectInput(paste0(text,"Val"),"choose",choices = DT[,col1])
}else{
selectInput(paste0(text,"Val"),"choose",choices = DT[col1 == data(),col2])
}
})
}
server <- function(input, output, session) {
reactive_choose=reactive({
input$textArg1Val
})
callModule(myTextFunc, 'menu1', 'textArg1')
callModule(myTextFunc, 'menu2', 'textArg2',reactive_choose)
}