基于用户输入闪亮R的动态图像输出

时间:2017-01-12 18:46:56

标签: r image csv shiny reactive-programming

我有一个csv文件,我上传到一个闪亮的应用程序。在其他信息中,csv文件包含一列名称(输入)和一列与每个名称相关联的唯一ID。基本上我想要发生的是每次用户选择不同的名称时,app会获取相应的ID并将其插入到URL中以显示PNG图像作为输出。例如,假设用户选择名称" Joe Smith"而Joe的唯一ID是" smithj01"。我需要应用程序插入" smithj01"到一个URL,否则总是相同,然后显示乔的图像。如果用户然后选择" John Doe"约翰的唯一身份证是" doej01"我需要应用程序插入" doej01"进入相同的URL以显示John的图像。

我已尝试在下面的代码中编写一个执行此功能的功能,但它仍然只显示带有问号的蓝框,图像应显示在其中。

我已经一次又一次地尝试自己解决这个问题,查看了许多其他帖子和示例代码,但不能,对于我的生活,想出这个。请帮忙!非常感谢你!

library(shiny)

injury <- read.csv("injury_app.csv", stringsAsFactors = FALSE)

"player_id" = "ID"

player_photo_url = function(player_id) {
  paste0("http://ssref.net/scripts/image_resize.cgi?min=200&url=https://d2cwpp38twqe55.cloudfront.net/req/201612101/images/players/", player_id,".png")
}

ui <- fluidPage(
  titlePanel("Title Goes Here"),
  sidebarLayout(
    sidebarPanel(
      selectInput("Player", "Player",
                  choices = c("Enter a player..." = "", injury$Player))
    ),
    mainPanel(
      uiOutput("image")
    )
  )
)

server <- function(input, output) {
  current_player = reactive({
    req(input$Player)
  })
  output$image <- renderUI({tags$img(src = player_photo_url(current_player()["player_id"]))
  })
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

你有一些奇怪的事情发生,但最令人担忧的事情似乎是你试图选择所选玩家名称的ID。假设csv injury作为数据帧读入,这应该有效:

library(shiny)

injury <- read.csv("injury_app.csv", stringsAsFactors = FALSE)
uniq_players <- sort(unique(injury$Player))

ui <- fluidPage(
  titlePanel("Title Goes Here"),
  sidebarLayout(
    sidebarPanel(
      selectInput("Player", "Player",
                  choices = c("Enter a player..." = "", uniq_players))
    ),
    mainPanel(
      uiOutput("image")
    )
  )
)

server <- function(input, output) {

  c_id <- reactive({
    shiny::validate(
      shiny::need(input$Player, "Select a player!")
    )
    injury[injury$Player == input$Player, "ID"]
  })

  c_url <- reactive({
    paste0("http://ssref.net/scripts/image_resize.cgi?min=200&url=https://d2cwpp38twqe55.cloudfront.net/req/201612101/images/players/", c_id(), ".png")
  })

  output$image <- renderUI({
    tags$img(src = c_url())
  })
}

shinyApp(ui = ui, server = server)