获取绘图以显示在动态生成的选项卡集RShiny中
我有以下(简化)闪亮的应用程序。 我正在尝试生成与顶部表格中选定行一样多的选项卡,每个选项卡上显示一个图形。我无法获取显示as中getting获取绘图以显示在动态生成的选项卡集RShiny中,r,tabs,shiny,R,Tabs,Shiny,我有以下(简化)闪亮的应用程序。 我正在尝试生成与顶部表格中选定行一样多的选项卡,每个选项卡上显示一个图形。我无法获取显示as中getting错误的图形。vector:无法将类型“closure”强制为该Lappy或后续do中的某个位置的类型“character”的向量。调用 library(shiny) library(DT) UI由一个表和空间组成,用于我试图在其中显示的选项卡: ui <- fluidPage( titlePanel("Test"), mainPanel(
错误的图形。vector:无法将类型“closure”强制为该Lappy
或后续do中的某个位置的类型“character”
的向量。调用
library(shiny)
library(DT)
UI由一个表和空间组成,用于我试图在其中显示的选项卡:
ui <- fluidPage(
titlePanel("Test"),
mainPanel(
fluidRow(
column(12,DT::dataTableOutput(outputId = 'tableCurrencies'))
),
fluidRow(
uiOutput("selectedTabs")
)
)
)
欢迎任何帮助。代码的问题在于您使用
# context server/rederUI
plot = renderPlot({hist(rnorm(50)})
...
plotOutput(plot)
检查文档,您会发现这是不正确的用法
绘图输出(outputId,…)
outputId:从中读取绘图/图像的输出变量
实际上,您将类shinny.render.function
的对象传递给了输出函数。但是,唯一有效的值是(id)字符串。我很惊讶shiny仍然没有抛出错误,因为很多人都有这个问题
这是一个工作版本。您必须为每个绘图分配一个新的输出
插槽
library(shiny)
library(DT)
ui <- fluidPage(
titlePanel("Test"),
mainPanel(
fluidRow(
column(12, DT::dataTableOutput(outputId = 'tableCurrencies'))
),
fluidRow(
uiOutput("selectedTabs")
)
)
)
server <- function(input, output){
output$tableCurrencies <- DT::renderDataTable({datatable(data.frame(
a = rnorm(10), b = rnorm(10), c = rnorm(10)))})
origTable_selected <- reactive({
ids <- input$tableCurrencies_rows_selected
return(ids)
})
output$selectedTabs <- renderUI({
print(origTable_selected())
myTabs <- lapply(origTable_selected(), function(i) {
outname <- paste0("plot-", i) # this
output[[outname]] <- renderPlot({hist(rnorm(50))}) # was
return(tabPanel(i, plotOutput(outname))) # wrong
})
return(do.call(tabsetPanel,myTabs))
})
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(DT)
很好。谢谢,不客气。我很喜欢那个ui设计,不知羞耻地从另一个答案中窃取和修改!至少你对此很谦虚。确保不要在ID中添加空格,因为它们将按HTML文档中的原样使用,
library(shiny)
library(DT)
ui <- fluidPage(
titlePanel("Test"),
mainPanel(
fluidRow(
column(12, DT::dataTableOutput(outputId = 'tableCurrencies'))
),
fluidRow(
uiOutput("selectedTabs")
)
)
)
server <- function(input, output){
output$tableCurrencies <- DT::renderDataTable({datatable(data.frame(
a = rnorm(10), b = rnorm(10), c = rnorm(10)))})
origTable_selected <- reactive({
ids <- input$tableCurrencies_rows_selected
return(ids)
})
output$selectedTabs <- renderUI({
print(origTable_selected())
myTabs <- lapply(origTable_selected(), function(i) {
outname <- paste0("plot-", i) # this
output[[outname]] <- renderPlot({hist(rnorm(50))}) # was
return(tabPanel(i, plotOutput(outname))) # wrong
})
return(do.call(tabsetPanel,myTabs))
})
}
shinyApp(ui = ui, server = server)