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

R 基于用户输入的动态图像输出,r,image,csv,shiny,reactive-programming,R,Image,Csv,Shiny,Reactive Programming,我有一个csv文件,我正在上传到一个闪亮的应用程序。除其他信息外,csv文件包含一列名称(输入)和一列与每个名称关联的唯一ID。基本上,我希望每次用户选择不同的名称时,应用程序都会获取相应的ID并将其插入URL,以显示PNG图像作为输出。例如,假设用户选择名称“Joe Smith”,Joe的唯一ID为“smithj01”。我需要应用程序插入“smithj01”到一个网址,否则总是相同的,然后显示乔的形象。如果用户选择“John Doe”并且John的唯一ID为“doej01”,我需要应用程序将“

我有一个csv文件,我正在上传到一个闪亮的应用程序。除其他信息外,csv文件包含一列名称(输入)和一列与每个名称关联的唯一ID。基本上,我希望每次用户选择不同的名称时,应用程序都会获取相应的ID并将其插入URL,以显示PNG图像作为输出。例如,假设用户选择名称“Joe Smith”,Joe的唯一ID为“smithj01”。我需要应用程序插入“smithj01”到一个网址,否则总是相同的,然后显示乔的形象。如果用户选择“John Doe”并且John的唯一ID为“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)
库(闪亮)

受伤你遇到了一些奇怪的事情,但最令人担忧的似乎是你试图为选择的球员名字选择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)
库(闪亮)

伤害<代码>https://d2cwpp38twqe55.cloudfront.net/req/201612101/images/players/doej01.png
返回HTTP错误404HubertL,感谢您的回复!这只是我举的一个假设的例子。例如,一个真实的ID是“jamesle01”,请包括csv的csv标题,包括“球员”“ID”“年龄”“季节”等。对于这个特定的示例,我只关心列标题“球员”和“ID”Hi-mlegge!谢谢你的回复。现在,当我尝试选择一个玩家时,它似乎给了我“错误:找不到对象‘玩家’”。有什么办法可以解决这个问题吗?我忘记了在处理数据帧而不是数据表时,
injury[Player==input$Player,“ID”]
必须是
injury[injury$Player==input$Player,“ID”]
。我已经在代码中做了调整