Shiny:renderPlot()在app初始化时没有出现withMathJax()?

时间:2015-08-05 04:31:58

标签: r shiny

我一直在创建一个Shiny应用程序,它创建依赖于某些基于滑块的设置的图表和表格。一切正常,除了在运行应用程序时,在移动其中一个滑块之前,绘图不会出现。多个浏览器和计算机就是这种情况。

以下是一个例子:

#ui.R
shinyUI(fluidPage(

  titlePanel("mtcars example"),

  sidebarLayout(
    sidebarPanel(
      sliderInput("mVal",
                  "Goal HP:",
                  min = 50,
                  max = 350,
                  value = 100)
    ),

    mainPanel(
      plotOutput("distPlot",width='1000px',height='600px'),
      uiOutput("view")
    )
  )
))

#server.R
library(ggplot2)
shinyServer(function(input, output,session) {

  output$distPlot <- renderPlot({
    MTtemp <- mtcars
    MTtemp$distToTarget <- (MTtemp$hp - input$mVal)^2

    p1<-ggplot(MTtemp,aes(x=hp,y=mpg,col=log(distToTarget)))+geom_point()+scale_colour_gradientn(colours=c('red','lightblue'))
    print(p1)

  })

  output$view <- renderUI({
    MTtemp <- mtcars
    MTtemp$distToTarget <- (MTtemp$hp - input$mVal)^2

    tM<-head(MTtemp[order(MTtemp$distToTarget),],n=10)

    M <- print(xtable(tM), floating=FALSE, tabular.environment="array", comment=FALSE, print.results=FALSE)
    html <- paste0("$$", M, "$$")
    list(
      withMathJax(HTML(html))
    )
  })      
})

但是,如果不是使用renderUI()和mathjax / html,我只需要使用renderTable(),就会像我期望的那样直接显示情节。即,将上面的输出$视图替换为:

  output$view <- renderTable({
    MTtemp <- mtcars
    MTtemp$distToTarget <- (MTtemp$hp - input$mVal)^2
    head(MTtemp[order(MTtemp$distToTarget),],n=10)
  })

如果所有其他方法都失败了,这是一个可行的解决方案,但我更喜欢使用更漂亮的renderUI / mathjax表。因此,我希望有人能够深入了解这些元素之间的相互作用,这些因素导致情节最初不会出现,或者我正在制作这些行为的其他错误。

编辑:似乎是导致问题的mathjax。理想情况下,我希望在看到情节出现时保留mathjax的方法。

1 个答案:

答案 0 :(得分:0)

返回html对象对我有效,并且它似乎是相同的输出:

  output$view <- renderUI({
    MTtemp <- mtcars
    MTtemp$distToTarget <- (MTtemp$hp - input$mVal)^2

    tM<-head(MTtemp[order(MTtemp$distToTarget),],n=10)

    M <- print(xtable(tM), floating=FALSE, tabular.environment="array", comment=FALSE, print.results=FALSE)
    html <- paste0("$$", M, "$$")
#     list(
#       withMathJax(HTML(html))
#     )
    return(html)
  })

使用renderTable的示例

library(shiny)
library(ggplot2)

server <- shinyServer(function(input, output) {

  output$distPlot <- renderPlot({
    MTtemp <- mtcars
    MTtemp$distToTarget <- (MTtemp$hp - input$mVal)^2

    p1<-ggplot(MTtemp,aes(x=hp,y=mpg,col=log(distToTarget)))+geom_point()+scale_colour_gradientn(colours=c('red','lightblue'))
    print(p1)

  })

  output$view <- renderTable({
    MTtemp <- mtcars
    MTtemp$distToTarget <- (MTtemp$hp - input$mVal)^2

    tM<-head(MTtemp[order(MTtemp$distToTarget),],n=10)

    return(tM)

  }) 

})


ui <- fluidPage(
  titlePanel("mtcars example"),

  sidebarLayout(
    sidebarPanel(
      sliderInput("mVal",
                  "Goal HP:",
                  min = 50,
                  max = 350,
                  value = 100)
    ),

    mainPanel(
      plotOutput("distPlot",width='1000px',height='600px'),
      tableOutput("view")
    )
  )
)

shinyApp(ui = ui, server = server)