2017-01-12 7 views
0

Ich habe eine CSV-Datei, die ich in eine glänzende App hochlade. Neben anderen Informationen enthält die CSV-Datei eine Spalte mit Namen (Eingabe) und eine Spalte mit eindeutigen IDs für jeden Namen. Grundsätzlich möchte ich, dass jedes Mal, wenn ein Benutzer einen anderen Namen auswählt, die App die entsprechende ID annimmt und sie in eine URL einfügt, um ein PNG-Bild als Ausgabe anzuzeigen. Angenommen, der Benutzer wählt den Namen "Joe Smith" aus, und die eindeutige ID von Joe lautet "smithj01". Ich brauche die App, um "smithj01" in eine URL einzufügen, die ansonsten immer die gleiche ist, um dann Joe's Bild anzuzeigen. Wenn der Benutzer dann "John Doe" auswählt und Johns eindeutige ID "doej01" lautet, muss die App "doej01" in dieselbe URL einfügen, um Johns Bild anzuzeigen.Dynamische Bildausgabe basierend auf Benutzereingabe glänzend R

Ich habe versucht, eine Funktion zu schreiben, die dies in dem Code unten tut, aber es zeigt immer noch nur eine blaue Box mit einem Fragezeichen an, wo das Bild angezeigt werden soll.

Ich habe immer wieder versucht, dieses Problem auf eigene Faust zu lösen, schaute auf zahlreiche andere Beiträge und Beispielcode, kann aber nicht, für das Leben von mir, dies herausfinden. Bitte helfen Sie! Ich danke dir sehr!

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/images/Spieler/doej01.png' 404 – HubertL

+0

HubertL HTTP-Fehler zurückgibt , Danke für Ihre Antwort! Das ist nur ein hypothetisches Beispiel, das ich gab. Eine echte ID, zum Beispiel, ist "jamesle01" – Abb

+0

Bitte fügen Sie Header Ihrer csv – HubertL

Antwort

0

du hast gehen einige seltsame Dinge auf, aber die meisten über Sache scheint Ihre Versuche zu sein, um die ID für den Spielernamen ausgewählt Auswahl. Unter der Annahme der csv injury als Datenrahmen gelesen in dieser Arbeit sollte:

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

Hi mlegge! Danke für diese Antwort. Jetzt scheint es mir zu geben, "Fehler: Objekt 'Spieler' nicht gefunden", wenn ich versuche, einen Spieler auszuwählen. Gibt es eine Möglichkeit, dies zu lösen? – Abb

+0

Ich habe 'Verletzung [Player == Eingabe $ Player," ID "]' 'benötigt um' Verletzung [Verletzung $ Player == Eingabe $ Player, "ID"] 'bei der Behandlung mit einem Datenrahmen anstelle einer data.table . Ich habe die Einstellung im Code – mlegge

+0

gemacht Das ist fantastisch !!! Vielen Dank für die Lösung meiner Sauerei !!! :) – Abb

Verwandte Themen