Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取绘图以显示在动态生成的选项卡集RShiny中_R_Tabs_Shiny - Fatal编程技术网

获取绘图以显示在动态生成的选项卡集RShiny中

获取绘图以显示在动态生成的选项卡集RShiny中,r,tabs,shiny,R,Tabs,Shiny,我有以下(简化)闪亮的应用程序。 我正在尝试生成与顶部表格中选定行一样多的选项卡,每个选项卡上显示一个图形。我无法获取显示as中getting错误的图形。vector:无法将类型“closure”强制为该Lappy或后续do中的某个位置的类型“character”的向量。调用 library(shiny) library(DT) UI由一个表和空间组成,用于我试图在其中显示的选项卡: ui <- fluidPage( titlePanel("Test"), mainPanel(

我有以下(简化)闪亮的应用程序。 我正在尝试生成与顶部表格中选定行一样多的选项卡,每个选项卡上显示一个图形。我无法获取显示as中getting
错误的图形。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)