首页 > 解决方案 > 是否可以在没有闪亮会话的情况下使用 renderPlot 的结果?

问题描述

我创建了一个仪表板,它根据每 8 小时更新一次的数据显示图表。此数据通过 cron-jobbed Python 脚本更新,因此 R/shiny 仅用于绘图/仪表板目的。该图是通过几个reactive函数创建的,最后是一个renderPlot. 是否可以在没有闪亮上下文的情况下调用或导入这些反应函数,以便我可以在不运行仪表板的情况下创建绘图?

最终目标是在每次从 Python 更新数据时创建绘图并保存/发送它,而不需要重复的 R 代码。

标签: rshinyshinydashboard

解决方案


我认为最好的方法是创建一个包。

例如,如果你通过{golem}框架构建一个应用程序,你可以在应用程序之外使用内部的“业务”功能。

所以这个想法是:

  • 构建接受输入并生成绘图的函数
  • 在你的渲染图中使用这个函数。

例如 :

在情节.R

my_plot <- function(dataset){
  ggplot(dataset, aes(Sepal.Length, Sepal.Width)) + 
    geom_point()
}

然后您可以在应用程序中重用它:

library(shiny)
ui <- function(request){
  plotOutput("plot")
}

server <- function(input, output, session){

  r <- reactiveValues()

  observe({
    r$data <- iris
  })

  output$plot <- renderPlot({
    my_plot(r$data)
  })
}

shinyApp(ui, server)

这里的想法是,如果您将所有内容构建为一个包(例如名为“ {myapp}”,您将能够在myapp::my_plot()闪亮的上下文之外访问。

因此,在启动 cron 时,您可以添加类似R -e 'myapp::my_plot(dataset)'.


推荐阅读