Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-为同一分析呈现多个输出_R_Output_Render_Shiny_Shiny Server - Fatal编程技术网

R-为同一分析呈现多个输出

R-为同一分析呈现多个输出,r,output,render,shiny,shiny-server,R,Output,Render,Shiny,Shiny Server,如果我有一个相当耗时的分析,比如说将模型拟合到某个数据集。我想显示模型拟合的所有输出,比如说将有renderPlot()、renderTable()、renderText()等。如何在模型只运行一次的情况下渲染所有这些输出?我当前的代码如下所示: shinyServer(function(input, output,session) { output$twang_diagplot <- renderPlot({ if(is.null(data())|input$twang_x=='

如果我有一个相当耗时的分析,比如说将模型拟合到某个数据集。我想显示模型拟合的所有输出,比如说将有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)   
} 
})
})
shinyServer(函数(输入、输出、会话){

output$twang\u diagplot对
ps()
的两个调用似乎使用了不同的参数,因此我不确定在这种情况下是否可以使用只调用一次的被动式,因为
ps
必须调用两次,我看不到解决方法

另外,您的代码可以从更大的间距中获益,使其更具可读性:)

评论后编辑:
你读过这本书了吗 像这样的东西应该有用

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

getPsFit谢谢你的回复!事实上,我的两个ps()可以使用相同的参数。在这种情况下,我如何使用reactive()来包装两个渲染输出?嗨,daattali,你能看一下上面的代码吗?是这样的吗?但是getPsFit()似乎函数仍然被调用了两次?PS我确实阅读了教程,但似乎无法使它工作,因此我认为可能我没有以正确的方式执行它。
getPsFit
将在每次它的一个依赖项更改时运行。它有两个依赖项(
input$twang\u x
input$twang\u y
)因此,它可能会被调用两次,每次输入更改一次。如果这是问题所在,可以通过
操作按钮来解决。最初,反应性有点难理解,可能会让人困惑,如果你是新手,我建议看很多闪亮的应用程序示例,尝试理解它,这会让人困惑两个依赖项不会改变,当我renderPlot时调用getPsFit,然后在renderplint时再次调用,这不是真的吗?
getPsFit <- reactive({
    formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+'))
    ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE)
    ps_fit
})