R Shiny: сделать изображение из файла - PullRequest
0 голосов
/ 06 марта 2020

Этот код должен отобразить изображение sing.jpg в / www directory после окончания обратного отсчета. Это работает при рендеринге обычного текста, но с изображением - как я его реализовал - я получаю следующую ошибку:

аргумент 1 (тип 'closure') не может быть обработан 'cat'

Почему это?

library(shiny)
library(shinyjs)

ui <- fluidPage(
  actionButton("do", "Click Me"),
  verbatimTextOutput("eventTimeRemaining")
)

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

  EventTime <- reactiveVal()

  observeEvent(input$do,{
    EventTime(Sys.time() + 3)
  })

  output$eventTimeRemaining <- renderText({

    req(input$do)

    timeLeft <- round(difftime(EventTime(), Sys.time(), units='secs'))

    if(timeLeft > 0){
      invalidateLater(1000, session)
      msg <- timeLeft
    } else {

      msg <- renderImage({
        # Return a list containing the filename
        list(src = './sing.jpg')
    }, deleteFile = FALSE)

      }

    msg

  })
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 06 марта 2020

Я бы создал отдельный вывод в ui, например imageOutput, чтобы показать ваше изображение. Кроме того, я бы сделал timeLeft отдельным выражением reactive, на которое могут ссылаться как eventTimeRemaining для отображения обратного отсчета, так и msg (создано отдельное output).

Я не был уверен, как вы хотите обработать начальное условие - я установил значение по умолчанию EventTime на Sys.time(), но если вы используете NULL или не инициализируете, тогда нужно будет проверить NULL в output и timeLeft расчет.

library(shiny)
library(shinyjs)

ui <- fluidPage(
  actionButton("do", "Click Me"),
  verbatimTextOutput("eventTimeRemaining"),
  imageOutput("msg")
)

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

  EventTime <- reactiveVal(Sys.time())

  observeEvent(input$do,{
    EventTime(Sys.time() + 3)
  })

  timeLeft <- reactive({
    tl <- round(difftime(EventTime(), Sys.time(), units='secs'))
    if (tl > 0) {
      invalidateLater(1000, session)
    } 
    tl
  })

  output$eventTimeRemaining <- renderText({
    timeLeft()
  })

  output$msg <- renderImage({
    if (timeLeft() > 0) {
      list(src = '')
    } else {
      list(src = './sing.jpg')
    }
  }, deleteFile = FALSE)
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...