繁体   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