2017-12-24 3 views
0

plotten Karte (rworldmap), das Problem ist, kann ich nicht die reaktive Funktion für die Auswahl der Daten verwenden, zum Beispiel der Benutzer kann die Daten wählen.? (zum Beispiel: countryRegions oder countryExData) Hier ist der Codewie man Karte ("rworldmap") auf Shiny R, mit ausgewählten Daten

library(rworldmap) 
library(shiny) 
data(countryRegions) 
data(countryExData) 

runApp(list( 
    ui= fluidPage(
    selectInput("dataset", "Data", c('countryRegions', 'countryExData')), 
    plotOutput("Cart", height="560px", width="950px") 
), 

    server = function(input, output) { 
    datasetInput <- reactive({ 
     switch(input$dataset, 
      'countryRegions' = countryRegions, 
      'countryExData' = countryExData) }) 
    if (datasetInput()==countryRegions) { 
     sPDF <- joinCountryData2Map(datasetInput() 
            , joinCode = "ISO3" 
            , nameJoinColumn = "ISO3") 

     output$Cart <- renderPlot({ 
     mapParams <- mapPolys(sPDF, nameColumnToPlot="AVOIDnumeric", 
           mapRegion='world', 
           missingCountryCol='dark grey', numCats=10, 
           colourPalette=c('yellow','green','blue'), 
           addLegend=TRUE, 
           oceanCol='light blue') 
     mtext("[Grey Color: No Data Available]",side=1,line=-1) 
     })} 
    if (datasetInput()==countryExData){ 
     ##maping 
     sPDF <- joinCountryData2Map(datasetInput() 
            , joinCode = "ISO3" 
            , nameJoinColumn = "ISO3V10") 
     output$Cart <- renderPlot({ 
     mapParams <- mapPolys(sPDF, nameColumnToPlot="Population2005", 
           mapRegion='world', 
           missingCountryCol='dark grey', numCats=10, 
           colourPalette=c('yellow','green','blue'), 
           addLegend=TRUE, 
           oceanCol='light blue') 
     mtext("[Grey Color: No Data Available]",side=1,line=-1) 
     }) 
    } 
    } 
)) 

auch ist es eine Chance, den Benutzern zu erlauben, einige Daten Spalten auswählen

+0

Können Sie etwas konkreter? Welche Teile des Datasets können Sie nicht dynamisch unterteilen (mit reaktiven Umgebungen)? –

+0

Ich möchte dem Benutzer erlauben, die Daten auszuwählen, für die ich 'selectInput (" Datensatz "," Daten ", c ('countryRegions', 'countryExData'))' 'und dann abhängig von den ausgewählten Daten verwende ich es in einem Kartenplot verwende ich 'reactive fonction datasetInput <- reactive ({ switch (Eingabe $ Dataset, ...') aber es ist offensichtlich, ich benutze es nicht gut, ich kann den Fehler nicht finden. –

+0

Die Die letzte Frage wird wahrscheinlich in anderen Beiträgen hier auf SO beantwortet.Fühlen Sie sich frei zu durchsuchen.Wenn es nichts gibt, erstellen Sie ein kleines Beispiel (wie das, das ich unten veröffentlicht habe) und wie Sie die Informationen zu einer bestimmten Variable in Ihrem Workflow verwenden würden. –

Antwort

0

Wie ich Nähern Sie sich diesen Dingen, beginnen Sie einfach und bauen Sie dann auf das (Arbeits-) Skelett auf dass Sie zwei if-Anweisungen haben und jede dem entsprechenden Datensatz entspricht. Sie müssen sicherstellen, dass die if-Anweisung den Eingabewert überprüft. Sie haben den Datensatz zugewiesen, aber die Überprüfung des gesamten Datensatzes ist nicht so einfach und in diesem Fall nicht notwendig, da Sie die Kontrolle über den gesamten Workflow haben.

Zum Beispiel lassen Sie uns zuerst

korrekte Ausgabe erstellen
runApp(list( 
    ui= fluidPage(
    selectInput("dataset", "Data", c('countryRegions', 'countryExData'), selected = NULL), 
    plotOutput("Cart", height="560px", width="950px") 
), 

    server = function(input, output) { 
    output$Cart <- renderPlot({ 
     if (input$dataset == "countryRegions") { 
     message("Selected countryRegions") 
     plot(x = 1:10, y = rnorm(10), main = "Selected countryRegions") 

     } 
     if (input$dataset == "countryExData") { 
     message("selected countryExData") 
     plot(x = 1:10, y = rnorm(10), main = "Selected countryExData") 
     } 
    }) 
    } 
)) 

Diese Sie überzeugt, dass, was Option ausgewählt ist, auf das Gerät aufgetragen ist. Dann starten Sie Ihre eigenen Funktionen hinzugefügt, wie so:

runApp(list( 
    ui = fluidPage(
    selectInput("dataset", "Data", c('countryRegions', 'countryExData'), selected = NULL), 
    plotOutput("Cart", height="560px", width="950px") 
), 

    server = function(input, output) { 
    output$Cart <- renderPlot({ 
     if (input$dataset == "countryRegions") { 
     sPDF <- joinCountryData2Map(countryRegions 
            , joinCode = "ISO3" 
            , nameJoinColumn = "ISO3") 

      mapParams <- mapPolys(sPDF, nameColumnToPlot = "AVOIDnumeric", 
           mapRegion = 'world', 
           missingCountryCol = 'dark grey', numCats = 10, 
           colourPalette = c('yellow', 'green', 'blue'), 
           addLegend = TRUE, 
           oceanCol = 'light blue') 
      mtext("[Grey Color: No Data Available]", side = 1, line = -1) 

     } 
     if (input$dataset == "countryExData") { 
     message("selected countryExData") 
     plot(x = 1:10, y = rnorm(10), main = "Selected countryExData") 
     } 

    }) 
    } 
)) 

Dies wird Ihre Weltkarte für input$dataset == "countryRegion" und die generische Handlung für input$dataset == "countryExData" anzuzeigen. Fiedel mit ihm von hier an.

enter image description here