1

プロットを生成して UI にレンダリングするアプリケーションからの以下のサンプル コードがあります。

library(shiny)

ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
plotOutput("some_ui")
)

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

output$some_ui <- renderPlot({
if(input$run==0) return()
withProgress(message = paste("Drawing heatmap, please wait."),{
heatmap_render(x,y)    ##custom function to generate plot###
})
})
}

プロットを生成するためのカスタム関数が含まれているため、これは実用的な例ではありません。このアプローチは機能します。

ただし、アプリケーションが起動され、アクション ボタンがクリックされる前に、デフォルトのプロットを表示する必要があります。私はいくつかのアプローチを試みました。

ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
plotOutput("some_ui")
)

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

output$some_ui <-  renderUI({
if(input$run == 0)return()
  list(src = "www/heatmap.png")
})

output$some_ui <- renderPlot({
if(input$run == 0) return()
withProgress(message = paste("Drawing heatmap, please wait."),{
heatmap_render(x,y)    ##custom function to generate plot###
})
})
}

これはデフォルトのプロットをレンダリングしませんでしたが、アクション ボタンをクリックすると正常に動作します。

アプローチ 2:plotOutputに変更uiOutput

ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
uiOutput("some_ui")
)

server <- function(input, output, session) {
output$some_ui <-  renderUI({
if(input$run==0)return()
  list(src = "/www/heatmap.png")
})

output$some_ui <- renderPlot({
if(input$run == 0) return()
withProgress(message = paste("Drawing heatmap, please wait."),{
heatmap_render(x,y)    ##custom function to generate plot###
})
})
}

これにより、Error in pngfun: invalid quartz() device sizeactionButton がトリガーされたときにエラーが発生します。また、デフォルトの画像 (「www/heatap.png」) は表示されません。

またrenderImage、アプローチ 2 で使用するとError in pngfun: invalid quartz() device size、actionButton がトリガーされたときに同じエラーが発生します。デフォルトの画像 (「www/heatap.png」) は表示されません。

 output$some_ui <-  renderImage({
 if(input$run==0)return()
  list(src = "www/heatmap.png", contentType = 'image/png')
  }, deleteFile = FALSE)

アプリケーションの起動時にデフォルト プロットをレンダリングする方法はありますか?

4

0 に答える 0