闪亮的 renderPlot 不起作用

Shiny renderPlot does not work

问题:

图表不渲染。没有错误。

描述:

即使我没有在下面使用反应值,它也应该起作用,因为它在观察到的事件中。渲染 table 效果非常好。

附加信息

肯定填充了 AllElements 数据!我把它们打印出来检查。它们是双精度类型的向量。

library(shiny)
library(shinyWidgets)
library(shinythemes)
library(datasets)

shinyApp(
  ui = navbarPage(
    "Real Time Instruments",
    #############################    Page 1     #############################
    tabPanel("Training",

             mainPanel(

               actionButton("analyse", "Train Model", width = "100%")

             )
             #############################    Page 2     #############################
    ),
    tabPanel("Results",

               tableOutput ( "error"),
               plotOutput("predict_plot", inline = TRUE)

    )
  ),
  server = function(input, output, session) {

    ### Analyse the data
    analyse <- observeEvent(input$analyse , {

      # Run the Analysis
      AllElements <- data.frame( x = 1:10 )

      # populate the results
      populateResults (AllElements)
    })

    #### Results Page ####
    populateResults <- function (allElements) {

      # First the error table
      output$error <- renderTable(allElements$error_sd, digits = 5) ## <--- THIS WORKS!!!

      # Second Plots
      # par(mar = rep(2, 4)) # Might be needed

      x <- allElements$x
      xlab <- allElements$x
      y <- allElements$x
      ylab <- allElements$x

      # Plot Predict Var
      output$predict_plot <- renderPlot({plot (x, y)}) # <--- THIS DOESN'T WORK!!!

    }
  })
  }
)

我不得不更改您的代码中的一些内容。

  • 我将数据转换成 eventReactive
  • 我没有使用你的函数populateResults,用独立的渲染函数代替了它
  • 我向示例数据集添加了一列 error_sd,以便稍后可以在渲染函数中找到它
  • 我不知道我是否遗漏了什么,看看我的代码。

这个例子对我有用:

library(shiny)
library(shinyWidgets)
library(shinythemes)
library(datasets)

shinyApp(
  ui = navbarPage(
    "Real Time Instruments",
    tabPanel("Training",

         mainPanel(

           actionButton("analyse", "Train Model", width = "100%")

         )
),
tabPanel("Results",

         tableOutput ( "error"),
         plotOutput("predict_plot")

) 
),
 server = function(input, output, session) {

analyse <- eventReactive(input$analyse , {
  output <- data.frame( x = 1:10 , error_sd = 1:10)
  return(output)
})

output$error <- renderTable({
  analyse()$error_sd} , digits = 5
)

output$predict_plot <- renderPlot({
  # x <- allElements$x
  # xlab <- allElements$x
  # y <- allElements$x
  # ylab <- allElements$x

  plot(analyse()$x, analyse()$x)
})
})