我们可以在同一面板中打印或绘制Shiny吗?

时间:2016-12-29 14:17:43

标签: r shiny

我想打电话

 output$IPLMatchPlot <- renderPlot({ 

 f(x)

})      或

 output$IPLMatchPrint <- renderPrint({
   f(x)
 })

函数f(x)返回绘图或数据框。

我可以在server.R中单独执行此操作,但希望显示为绘图或数据框的文本。有关如何执行此操作的任何建议

2 个答案:

答案 0 :(得分:4)

这可以通过使用renderUI()来处理,它检查它获得的输出类型并呈现适当的输出。

在UI部分中,您可以在要显示情节或打印的位置放置uiOutput

uiOutput("Plotorprint")

然后在服务器中,您将使用以下内容定义uiOutput

  output$Plotorprint <- renderUI({
    if (is.data.frame(f(x))) { # Check if output of f(x) is data.frame
      verbatinTextOutput("ISPLMatchPrint") # If so, create a print
    } else {                      # If not,
      plotOutput("ISPLMatchPlot") # create a plot
    }
  })

您也可以在服务器中保留您在问题中发布的定义。

然后应检查输出f(x)的输出,并呈现适当的输出。

答案 1 :(得分:0)

基于@ Marjin的回复的最终代码是

server.R

output$IPLMatchPlot <- renderPlot({        
     f(x,y,z)


})
output$IPLMatchPrint <- renderPrint({        
    df <- f(x,y,z)
    df
})

output$plotOrPrint <-  renderUI({  
    if(is.data.frame(scorecard <- printOrPlot(input, output,teams, otherTeam))){
        verbatimTextOutput("IPLMatchPrint")
    }
    else{
        plotOutput("IPLMatchPlot")
    }
})

ui.R

 uiOutput("plotOrPrint"),