我有一个简单的闪亮模块,我想从两个滑块输入中求和:
模块代码为:
模块
custSliderGroupInput <- function(id,slider1Name,slider2Name){
ns <- NS(id)
tagList(sliderInput(ns("slider1"),slider1Name,1,100,50),
sliderInput(ns("slider2"),slider2Name,1,20,10))
}
custSliderGroup <- function(input,output,session){
rv <- reactiveVal()
observeEvent(c(input$slider1,input$slider2),{
rv <- reactive({input$slider1 + input$slider2})
print(rv())
return(list(result = rv()))
})
}
在我的app.R
中,我想显示使用textOutput
时的结果,但是它不起作用并且没有错误显示。 (该值确实会在控制台中打印出来。)
应用
library(shiny)
ui <- fluidPage(
custSliderGroupInput("myslider","A","B"),
textOutput("text")
)
server <- function(input, output,session){
output$text <- renderText({
callModule(custSliderGroup,"myslider")$result
})
}
shinyApp(ui = ui, server = server)
我在Google和StackOverflow上进行了搜索,但是所有解决方案都无法正常工作。
答案 0 :(得分:0)
我通过某种方式解决了这个问题:
模块:
custSliderGroupInput <- function(id,slider1Name,slider2Name){
ns <- NS(id)
tagList(sliderInput(ns("slider1"),slider1Name,1,100,50),
sliderInput(ns("slider2"),slider2Name,1,20,10))
}
custSliderGroup <- function(input,output,session){
rv <- input$slider1 + input$slider2
return(rv)
}
应用
ui <- fluidPage(
custSliderGroupInput("myslider","A","B"),
textOutput("text")
)
server <- function(input, output,session){
output$text <- renderText({
callModule(custSliderGroup,"myslider")
})
}
shinyApp(ui = ui, server = server)
我不知道为什么,但是似乎使用reactive()
或observeEvent()
之类的功能会使模块环境过于复杂,弊大于利。它只是通过简化代码而起作用。如果有人知道这在理论上是有效的还是无效的,请发表您的答案!
非常感谢!