渲染从拟合模型生成的图表以响应闪亮

Render a plot generated from a fitted model in reactive for shiny

我正在构建一个闪亮的应用程序,我想将使用 R 中的基本 plot 函数生成的绘图渲染到主面板中。用于绘图的数据是直接从拟合模型模拟的,但我无法将值提取到数据框中,但所有值都出现在 plot() 参数中(我不必将其提取为数据框,如果我可以找到关于如何将我的绘图渲染到主面板中的解决方案)。

我是这方面的新手,尝试过但到目前为止没有运气。如何在应用程序的主面板中渲染生成的图?下面是一个示例代码。

ui.r代码:

library(shiny)
shinyUI(fluidPage(
  fluidRow(
    column(12,h1('TITLE'), align='middle')
  ),
  hr(),
  sidebarLayout(
  sidebarPanel(
    sliderInput('COVAL', 'Covariate value', min=1, max=5, value=3,step=1),align='left', ),#sidebarPanel

  mainPanel(
    fixedRow(
      imageOutput('PLOT', height = 600, width=1260) #?????
    )
     )#mainpanel
    )#sidebarLayout
 )#fluidPage
) #shinyUI

server.r代码:

library(data.table)
library(flexsurv)
#load some data
data(pbc, package="randomForestSRC")
data <- as.data.table(na.omit(pbc))
data[,years := days/365.25]

shinyServer(function(input,output) {
  pred.data <- reactive({
    COVAL <- input$COVAL
    
    #fit the model
    fit <- flexsurvspline(Surv(years, status) ~ albumin, data=data, k=1, scale='hazard')
    
    #plot predictions using the fitted- at specific covariate value
    #COVAL=3
    ndata = data.frame(albumin=COVAL)
    par(mfrow=c(1,1))
    plot(fit, est=F,ci=F, col.obs = 'white')
    lines(fit, newdata = ndata, ci=F, col=c('green'))
    
    #plot <- recordPlot() #this one saves the plot as an object
    #plot.new() #
    
    #render the plot: ????
    output$PLOT <- renderImage(
      pred.data()
    )#
      
  })#reactive
})#shinyServer
library(shiny)
library(data.table)
library(flexsurv)
#load some data
data(pbc, package="randomForestSRC")
data <- as.data.table(na.omit(pbc))
data[, years := days/365.25]


ui <- fluidPage(
  fluidRow(
    column(12, h1('TITLE'), align='middle')
  ),
  hr(),
  sidebarLayout(
    sidebarPanel(
      sliderInput('COVAL', 'Covariate value', min=1, max=5, value=3, step=1), 
      align = 'left', 
    ),
    mainPanel(
        plotOutput('PLOT', height = 600, width = 600) 
    )#mainpanel
  )#sidebarLayout
)#fluidPage


server <- function(input, output) {
  
  Fit <- reactive({
    #fit the model
    fit <- 
      flexsurvspline(Surv(years, status) ~ albumin, data=data, k=1, scale='hazard')
    
    return(fit)
  })#reactive
  
  output$PLOT <- renderPlot({
    ndata <- data.frame(albumin = input[["COVAL"]])
    fit <- Fit()
    plot(fit, est=FALSE, ci=FALSE, col.obs = 'black')
    lines(fit, newdata = ndata, ci=FALSE, col = 'green')
  })
  
}


shinyApp(ui, server)