簡體   English   中英

R Shiny-為同一分析呈現多個輸出

[英]R shiny - rendering multiple output for the same analysis

如果我的分析比較耗時,可以說是將模型擬合到某些數據集。 我想顯示模型擬合的所有輸出,例如將有renderPlot(),renderTable(),renderText()等。如何在模型僅運行一次的情況下呈現所有這些輸出? 我當前的代碼如下所示:

shinyServer(function(input, output,session) {  

output$twang_diagplot <- renderPlot({

if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL)

else{
  formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+')) 

  ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE)

  plot(ps_fit)   
}
})

output$twang_summary <- renderPrint({

if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL)

else{
  formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+')) 

  ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE)

  ps_balance <- bal.table(ps_fit)

  print(ps_balance)   
} 
})
})

在上面的示例中,我不得不調用ps()函數兩次以分別生成繪圖和摘要。 這是非常低效的。 我知道應該有一個函數,例如react()或observe(),可以在調用ps()函數后將兩個渲染函數包裝在一起,但是我不確定如何使用它。 感謝您的幫助! 問候

shinyServer(function(input, output,session) {  
getPsFit <- reactive({
formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+'))
ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE)
ps_fit
})
output$twang_diagplot <- renderPlot({
if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL)

else{
ps_fit <- getPsFit()
plot(ps_fit)   
}
})

output$twang_summary <- renderPrint({

if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL)

else{
ps_fit <- getPsFit()

ps_balance <- bal.table(ps_fit)

print(ps_balance)   
} 
})
})

看來兩次對ps()調用使用了不同的參數,所以我不確定在這種情況下您可以使用僅被調用一次的反應式,因為ps必須被調用兩次,我看不到避開...

PS。 您的代碼可以受益於更多的間距,使其更具可讀性:)

評論后編輯:
您是否閱讀了Shiny教程,特別是反應式表達式部分?
這樣的事情應該工作

getPsFit <- reactive({
    formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+'))
    ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE)
    ps_fit
})

現在只需將兩個else語句中的兩行代碼替換為ps_fit <- getPsFit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM