我正在尝试将一段代码转换为Shiny模块,但lapply()
中生成的renderText()
函数似乎不起作用。我在下面创建了一个简单的例子来演示这个问题。
(注意:我在这里使用library(shiny)
ui <- fixedPage(
h2("Normal example"),
uiOutput("test")
)
server <- function(input, output, session) {
output$test <- renderUI({
lapply(1:3, function(val) {
fluidRow(column(12,renderText(paste("Line", val))))
})
})
}
shinyApp(ui, server)
次调用,但同样的行为适用。)
app_normal.R:
library(shiny)
myModuleUI <- function(id) {
ns <- NS(id)
uiOutput(ns("test"))
}
myModule <- function(input, output, session) {
output$test <- renderUI({
lapply(1:3, function(val) {
fluidRow(column(12,renderText(paste("Line", val))))
})
})
}
ui <- fixedPage(
h2("Module example"),
myModuleUI("test_module")
)
server <- function(input, output, session) {
callModule(myModule, "test_module")
}
shinyApp(ui, server)
app_module.R:
div
正在创建所有renderText()
元素,但它们无法包含图表/文本。如何在模块中renderPlot()
/ renderUI()
次调用中正确使用闪亮的lapply()
或String username = "", password = "";
username = ((EditText)findViewById(R.id.username_pet)).toString();
password = ((EditText)findViewById(R.id.password_pet)).toString();
函数?
答案 0 :(得分:1)
我在renderText()
中直接使用renderPlot()
和renderUI()
函数的方法似乎在正常情况下正常工作,即在不在闪亮模块中运行时。 Shiny会自动调用必要的textOutput()
或plotOutput()
来生成HTML。在Shiny模块中执行相同操作时,如何破坏此自动链接。我怀疑这是由于output
列表中分配和引用项目之间的不匹配,因为在分配ns()
时引入了outputId
,因为在outputPlot()
调用时手动完成{1}}或outputText()
。
要在Shiny模块中成功使用renderUI
,您需要在{{1}的textOutput()
中单独呼叫renderText()
和textOutput
:lapply()
在renderUI()
的{{1}}中{}}和renderText()
。这样,我们就可以lapply()
为observe()
调用ns()
生成一个outputId
。
下面我已经对textOutput()
和app_normal.R
进行了重构,以证明这两个电话的解开。
app_normal_observe.R:
app_module.R
app_module_observe.R:
library(shiny)
ui <- fixedPage(
h2("Normal example"),
uiOutput("test")
)
server <- function(input, output, session) {
output$test <- renderUI({
lapply(1:3, function(val) {
fluidRow(column(12,textOutput(paste0("line_", val))))
})
})
observe({
lapply(1:3, function(val) {
output[[paste0("line_", val)]] <- renderText(paste("Line", val))
})
})
}
shinyApp(ui, server)