我当前的闪亮代码有问题。
我必须根据给定函数的结果生成动态数量的选项卡(该部分工作正常)。然后,我想在其他循环(例如 renderText)中生成这些选项卡的输入。但是,我生成的 renderText 的 textOutput 的最终输出始终是循环的最后一个 renderText 之一。
这是这个想法的一个小例子:
library(shiny)
library(shinydashboard)
ui <- pageWithSidebar(
headerPanel("xxx"),
sidebarPanel(),
mainPanel(
uiOutput("multipleUI")
)
)
server <- function(input, output) {
output$multipleUI <- renderUI({
tabs <- list(NULL)
for(i in 1:5){
tabs[[i]] <- tabPanel(title = paste0("tab ",i),
textOutput(paste0("out",i)), # prints j as 5 in all tabs
paste0("local out ",i)) # prints i as current loop value for each tab)
}
do.call(tabBox,tabs)
})
observe({
for(j in 1:5){
txt = paste0("generated out ", j)
print(txt) # print with current j
output[[paste0("out",j)]] <- renderText({txt})
}
})
}
shinyApp(ui, server)
虽然这对于 renderText 来说可能并不那么重要,我可以解决这个问题,但我打算渲染大量的绘图和表格,并且想不出解决方法。
我将不胜感激任何帮助!
编辑:我已经更新了代码以显示一个小的工作示例
这是一个似乎有效的解决方案。我在用着lapply
创建选项卡。让我知道它是否适合您的需要。
library(shiny)
ui <- pageWithSidebar(
headerPanel("xxx"),
sidebarPanel(),
mainPanel(
do.call(tabsetPanel, c(id='tab',lapply(1:5, function(i) {
tabPanel(
title=paste0('tab ', i),
textOutput(paste0('out',i))
)
})))
)
)
server <- function(input, output) {
lapply(1:5, function(j) {
output[[paste0('out',j)]] <- renderPrint({
paste0('generated out ', j)
})
})
}
shinyApp(ui, server)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)