2017-01-12 2 views
0

У меня есть файл csv, который я загружаю в блестящее приложение. Среди других сведений, файл csv содержит столбец имен (ввод) и столбец уникальных идентификаторов, связанных с каждым именем. В принципе, я хочу, чтобы каждый раз, когда пользователь выбирает другое имя, приложение принимает соответствующий идентификатор и вставляет его в URL-адрес, чтобы показать изображение PNG в качестве вывода. Например, скажем, пользователь выбирает имя «Джо Смит», а уникальный идентификатор Джо - «smithj01». Мне нужно приложение, чтобы вставить «smithj01» в URL-адрес, который в остальном всегда один и тот же, чтобы показать изображение Джо. Если пользователь затем выбирает «John Doe», а уникальный идентификатор Джона «doej01», мне нужно приложение, чтобы вставить «doej01» в тот же URL-адрес, чтобы показать образ Джона.Динамический вывод изображения на основе пользовательского ввода shiny R

Я пробовал написать функцию, которая делает это в приведенном ниже коде, но она по-прежнему показывает только синюю рамку с вопросительным знаком, где должно отображаться изображение.

Я пробовал снова и снова, чтобы решить эту проблему самостоятельно, рассмотрел множество других сообщений и пример кода, но не могу, для жизни меня, понять это. Пожалуйста помоги! Спасибо огромное!

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) 
+0

'https: // d2cwpp38twqe55.cloudfront.net/REQ/201612101/изображения/игроков/doej01.png' возвращает ошибку HTTP 404 – HubertL

+0

HubertL , Благодарю за ваш ответ! Это всего лишь гипотетический пример, который я дал. Например, реальный идентификатор «jamesle01» – Abb

+0

включает заголовки вашего csv – HubertL

ответ

0

У вас есть некоторые странные вещи, но самое относительно вещь, кажется, ваши попытки выбрать идентификатор для имени игрока, выбранного. Предполагая, что 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) 
+0

Привет, mlegge! Спасибо за этот ответ. Теперь кажется, что это дает мне: «Ошибка: объект« Игрок »не найден», когда я пытаюсь выбрать игрока. Есть ли способ решить это? – Abb

+0

Я забыл «травму» [Player == input $ Player, «ID»] 'должен быть« травмой »[травмой $ Player == input $ Player,« ID »]' при работе с фреймом данных вместо data.table , Я сделал настройку в коде – mlegge

+0

Это фантастика !!! Большое вам спасибо за исправление моего беспорядка !!! :) – Abb

Смежные вопросы