我一直在创建一个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的方法。
答案 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)