模块化 R Shiny 应用程序中带有 renderUI returns NULL 的 sliderInput
sliderInput with renderUI returns NULL in modularized R Shiny app
我有一个模块化的 R Shiny 应用程序,其中在 renderUI()
中创建了一个 sliderInput()
,以便可以将值传递给进一步处理(此处为 renderPrint()
)。首先,我在一个由 global.R
、ui.R
和 server.R
组成的简单应用程序中测试了该构造,它按预期工作(即在滑块修改时,打印了正确的滑块输入):
global.R
library(shiny)
ui.R
shinyUI(fluidPage(
fluidRow(column(3,
uiOutput("ui")),
column(3,
verbatimTextOutput("dynamic_value")))))
server.R
shinyServer(function(input, output, session) {
output$ui <- renderUI({
sliderInput("dynamic", "The slider:",
min = 1,
max = 20,
value = 10)
})
output$dynamic_value <- renderPrint({
str(input$dynamic)
})
})
然后,我将此构造转移到模块化应用程序中,令我惊讶的是,从滑块传递到文本输出的值是 NULL
而不是滑块输入的实际值:
global.R
library(shiny)
# load module
source("test_module.R")
test_ui.R
test_module_ui(id = "test")
ui.R
shinyUI(fluidPage(navbarPage(title = "Dynamic sliderInput",
tabPanel("Panel",
source("test_ui.R",
local = TRUE)$value))))
server.R
shinyServer(function(input, output, session) {
callModule(test_module, "test")
})
test_module.R
test_module_ui <- function(id) {
ns <- NS(id) # namespace
fluidRow(
column(3,
uiOutput(ns("ui"))),
column(3,
verbatimTextOutput(ns("dynamic_value")))
)
}
test_module <- function(input, output, session) {
output$ui <- renderUI({
sliderInput("dynamic", "The slider:",
min = 1,
max = 20,
value = 10)
})
output$dynamic_value <- renderPrint({
str(input$dynamic)
})
}
有人知道这里指定的错误吗?非常感谢任何提示——谢谢! :)
如 this question 所述,您必须在 renderUI()
:
中使用 session$ns()
test_module_server <- function(input, output, session) {
output$ui <- renderUI({
sliderInput(session$ns("dynamic"), "The slider:",
min = 1,
max = 20,
value = 10)
})
我有一个模块化的 R Shiny 应用程序,其中在 renderUI()
中创建了一个 sliderInput()
,以便可以将值传递给进一步处理(此处为 renderPrint()
)。首先,我在一个由 global.R
、ui.R
和 server.R
组成的简单应用程序中测试了该构造,它按预期工作(即在滑块修改时,打印了正确的滑块输入):
global.R
library(shiny)
ui.R
shinyUI(fluidPage(
fluidRow(column(3,
uiOutput("ui")),
column(3,
verbatimTextOutput("dynamic_value")))))
server.R
shinyServer(function(input, output, session) {
output$ui <- renderUI({
sliderInput("dynamic", "The slider:",
min = 1,
max = 20,
value = 10)
})
output$dynamic_value <- renderPrint({
str(input$dynamic)
})
})
然后,我将此构造转移到模块化应用程序中,令我惊讶的是,从滑块传递到文本输出的值是 NULL
而不是滑块输入的实际值:
global.R
library(shiny)
# load module
source("test_module.R")
test_ui.R
test_module_ui(id = "test")
ui.R
shinyUI(fluidPage(navbarPage(title = "Dynamic sliderInput",
tabPanel("Panel",
source("test_ui.R",
local = TRUE)$value))))
server.R
shinyServer(function(input, output, session) {
callModule(test_module, "test")
})
test_module.R
test_module_ui <- function(id) {
ns <- NS(id) # namespace
fluidRow(
column(3,
uiOutput(ns("ui"))),
column(3,
verbatimTextOutput(ns("dynamic_value")))
)
}
test_module <- function(input, output, session) {
output$ui <- renderUI({
sliderInput("dynamic", "The slider:",
min = 1,
max = 20,
value = 10)
})
output$dynamic_value <- renderPrint({
str(input$dynamic)
})
}
有人知道这里指定的错误吗?非常感谢任何提示——谢谢! :)
如 this question 所述,您必须在 renderUI()
:
session$ns()
test_module_server <- function(input, output, session) {
output$ui <- renderUI({
sliderInput(session$ns("dynamic"), "The slider:",
min = 1,
max = 20,
value = 10)
})