R Shiny:如何保存模块的返回值?
R Shiny: How to Save Returned Value from a Module?
我有一个简单的闪亮模块,我想从两个滑块输入中获取总和:
模块代码为:
模块
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 和 Whosebug 上进行了搜索,但所有解决方案都不起作用。
消息确实打印在控制台中:
但是 UI 上没有任何显示:
我通过这样做以某种方式解决了它:
模块:
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()
等功能会使模块环境过于复杂,弊大于利。它只是通过简化代码来工作。如果有人知道这在理论上是如何工作或不起作用的,请 post 你的答案!
非常感谢!
我有一个简单的闪亮模块,我想从两个滑块输入中获取总和:
模块代码为:
模块
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 和 Whosebug 上进行了搜索,但所有解决方案都不起作用。
消息确实打印在控制台中:
但是 UI 上没有任何显示:
我通过这样做以某种方式解决了它:
模块:
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()
等功能会使模块环境过于复杂,弊大于利。它只是通过简化代码来工作。如果有人知道这在理论上是如何工作或不起作用的,请 post 你的答案!
非常感谢!