【问题标题】:Shiny renderPlot does not work闪亮的渲染图不起作用
【发布时间】:2017-08-14 23:06:19
【问题描述】:

问题:

图表不渲染。没有错误。

说明:

即使我没有使用下面的反应值,它应该可以工作,因为它在观察到的事件中。渲染表格效果很好。

其他信息

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

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!!!

    }
  })
  }
)

【问题讨论】:

  • 请提供一个可重现的例子。错误也可能出现在 UI 中。所以请分享一个应用程序的代码。您也没有描述究竟是什么不起作用。没有剧情吗?是否显示错误消息?
  • @FelixGrossmann 更新。
  • 我更新了你的代码。由于缺少括号和一些逗号,它对我不起作用。毕竟它仍然不起作用,因为没有可用的AnalyseData
  • @FelixGrossmann 我用虚拟数据改变了它。它现在应该可以工作了

标签: r shiny reactive


【解决方案1】:

我不得不更改代码中的几处。

  • 我将数据转换成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)
})
})

【讨论】:

  • 上述数据的问题是我无法每次想要结果时都运行 analyse()$error_sd,考虑到函数的每次调用可能需要长达一个小时。如果我使用分析函数的结果,它会起作用吗: AllElements
  • 我不知道我是否理解正确。我回答我对你评论的两种解释。如果您不希望每次都使用其他数据计算 analyse(),您可以使用另一个按钮而不是 input$analyse 来完成此任务。因此,您可以将模型训练与数据生成分开。第二种解释:如果您只是希望数据的上瘾部分(如表格或绘图)在加载数据时不会抛出错误,您可以使用need()validate()
  • 如果您说德语,您可以阅读我关于该主题的博文:felixgrossmann.com/2017/04/03/eingabenvalidierung-in-r-shiny。或者您可以阅读官方帖子:shiny.rstudio.com/articles/validation.html 如果我没有正确理解您,请尝试以其他方式描述。我没有得到你的代码,因为analyse() 不会在那里弹出。
猜你喜欢
  • 2016-12-15
  • 2018-01-25
  • 2015-01-11
  • 1970-01-01
  • 2020-03-22
  • 2021-06-19
  • 2021-06-17
  • 1970-01-01
  • 2016-12-29
相关资源
最近更新 更多