[英]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.